none
Extraer imagenes desde dispositivo RRS feed

  • Pregunta

  • Estimados

          Junto con saludarlos, deseo poder encontrar la manera de poder extraer las imagenes desde un dispositivo USB ya sea una camara, usb, etc y poder almacenarlas en una carpeta definida por la aplicacion de forma automatica, si es que me pueden dar una mano, al menos para comprender el proceso

    • Cambiado Joyce_AC miércoles, 14 de junio de 2017 15:54
    martes, 13 de junio de 2017 20:20

Todas las respuestas

  • hola

    lo unico que veo es hacer uso de una libreria como ser

     Communicate with USB device in C# using LibUsbDotNet

    sino la otra es acceder al usb como una unidad normal, pero esto depne como se asigna el device a windows

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de junio de 2017 20:48
  • Gracias Leandro por tu respuesta pero lo que no ha sido accesible es poder encontrar el dispositivo que es asignado por Windows lo cual dificulta obtener las imagenes desde el dispositivo que este conectado. he buscado por varias paginas y aun no encuentro informacion correcta para realizar dicho proceso
    martes, 13 de junio de 2017 21:42
  • Buenas:

    He hecho de recibir archivos desde Arduino a C#, vale de Pc a PC también. Te dejo el código por si te da ideas.

    using System;
    using System.Text;
    using System.IO.Ports; // No olvidar.
    using System.IO;
    using System.Diagnostics;
    using System.Threading;
    
    namespace Recibir_archivo_desde_Arduino_consola_06
    {
        class Program
        {
            //enum ESTADOS { LEYENDOCANTIDAD, LEYENDOCODIGO, FIN }
            //static ESTADOS estado = ESTADOS.LEYENDOCANTIDAD;
            static int cantidadBytes;
            static StringBuilder sb = new StringBuilder();
    
            static void Main(string[] args)
            {
                Console.Title = "Título de la ventana.";
    
                SerialPort mySerialPort = new SerialPort("COM4");
    
                mySerialPort.BaudRate = 115200;
                mySerialPort.Parity = Parity.None;
                mySerialPort.StopBits = StopBits.One;
                mySerialPort.DataBits = 8;
                mySerialPort.Handshake = Handshake.None;
                mySerialPort.RtsEnable = true;
    
                mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                mySerialPort.Open();
    
                Console.WriteLine("Pulse cualquier tecla para salir...");
                Console.WriteLine();
                Console.ReadKey();
                mySerialPort.Close();
            }
    
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadExisting();
                string[] data = indata.Split('A');
                cantidadBytes = int.Parse(data[0]);
    
    
                switch (data[1].ToString())
                {
                    case "1":
                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                        Console.WriteLine("Foto: " + data[1] + ". Archivo tipo: jpg.");
                        break;
    
                    case "2":
                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                        Console.WriteLine("Foto: " + data[1] + ". Archivo tipo: png.");
                        break;
    
                    default:
                        Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
                        break;
                }
    
                int contador = 0;
                byte[] datosArray = new byte[cantidadBytes];
    
                //byte[] miBuffer = Encoding.ASCII.GetBytes("OK1");
                //sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 a Arduino.
    
                switch (indata)
                {
                    case "17729A1":
                        Thread.Sleep(100); // Retardo.
                        byte[] miBuffer = Encoding.ASCII.GetBytes("OK1"); // Codificación ASCII.
                        sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 al puerto serie.
                        break;
    
                    case "2065A2":
                        Thread.Sleep(100); // Retardo.
                        byte[] miBuffer2 = Encoding.ASCII.GetBytes("OK2"); // Codificación ASCII.
                        sp.Write(miBuffer2, 0, miBuffer2.Length); // Envía OK2 al puerto serie.
                        break;
    
                    default:
                        Console.WriteLine("Cosas raras en 'indata': " + indata.ToString()); // Por si hal algún error.
                        break;
                }
    
                while (true)
                {
    
                    contador += sp.Read(datosArray, contador, datosArray.Length - contador);
    
                    Console.SetCursorPosition(10, 6);
                    Console.Write("Datos recibidos:  {0}", contador);
                    Console.WriteLine("                   ");
    
                    if ((contador == cantidadBytes) && (contador == 17729))
                    {
                        Console.WriteLine();
                        Console.WriteLine("Creando archivo al disco duro...");
                        File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
                        Console.WriteLine();
                        Console.WriteLine("Archivo creado. Ejecutando imagen.");
                        Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
                        Console.WriteLine();
                        Console.WriteLine("Imagen ejecutada.");
                        Console.WriteLine();
                        Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
                        Console.WriteLine("FIN DE PROGRAMA.");
                        Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
                        break; // Garantiza que el ciclo termine
                    }
    
                    if ((contador == cantidadBytes) && (contador == 2065))
                    {
                        Console.WriteLine();
                        Console.WriteLine("Creando archivo al disco duro...");
                        File.WriteAllBytes("fotón.png", datosArray); // Crear archivo en el disco duro.
                        Console.WriteLine();
                        Console.WriteLine("Archivo creado. Ejecutando imagen.");
                        Process.Start("fotón.png"); // Ejecutar visualizador de imágenes.
                        Console.WriteLine();
                        Console.WriteLine("Imagen ejecutada.");
                        Console.WriteLine();
                        Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
                        Console.WriteLine("FIN DE PROGRAMA.");
                        Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
                        break; // Garantiza que el ciclo termine
                    }
                }
    
                Console.WriteLine("Dato recibido:");
                Console.Write(indata);
            }
        }
    }
    

    Aquí hay enlaces de capturar fotos en Webcam.

    Ver enlace.

    Vídeo de obtener imágens de Webcam con C#.

    Ver vídeo.

    Saludos.


    http://electronica-pic.blogspot.com

    miércoles, 12 de julio de 2017 4:29
  • Buenas,

    Si los usb que montas tienen su propia letra de unidad, puedes hacer asi:

    DriveInfo[] drives = DriveInfo.GetDrives();
    DriveInfo usb;
    foreach (DriveInfo drive in drives)
    {
        //Como los dcatos de la unidad de CD generan un IOException,
        //Hacemos la comparacion dentro de un TryCatch
        try
        {
            //Sustituye turrado por el nombre de tu unidad USB
            if (drive.VolumeLabel == "turrado")
            {
                usb = drive;
            }
        }
        catch
        {
    
        }
    }

    En caso de no tener unidad de CD que genere la excepción IOException, el proceso se puede reducir:

    DriveInfo usb = d.ToList().Find(x => x.VolumeLabel == "turrado");

    Una vez que tienes el usb localizado, puedes acceder a su letra mediante :

    string strLetra = usb.Name;


    Atte.


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!


    miércoles, 12 de julio de 2017 6:23
  • hola:

    Aquí te puede dar ideas.

    https://social.msdn.microsoft.com/Forums/es-ES/3ebc22c9-8e55-48cf-9eb1-7d447e8db4ae/cmo-obtener-la-letra-de-la-unidad-de-disco-duro-de-windows?forum=winformses

    https://msdn.microsoft.com/es-es/library/system.io.driveinfo.getdrives%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    using System;
    using System.IO;
    
    class Test
    {
        public static void Main()
        {
            DriveInfo[] allDrives = DriveInfo.GetDrives();
    
            foreach (DriveInfo d in allDrives)
            {
                Console.WriteLine("Drive {0}", d.Name);
                Console.WriteLine("  Drive type: {0}", d.DriveType);
                if (d.IsReady == true)
                {
                    Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
                    Console.WriteLine("  File system: {0}", d.DriveFormat);
                    Console.WriteLine(
                        "  Available space to current user:{0, 15} bytes", 
                        d.AvailableFreeSpace);
    
                    Console.WriteLine(
                        "  Total available space:          {0, 15} bytes",
                        d.TotalFreeSpace);
    
                    Console.WriteLine(
                        "  Total size of drive:            {0, 15} bytes ",
                        d.TotalSize);
                }
            }
        }
    }
    /* 
    This code produces output similar to the following:
    
    Drive A:\
      Drive type: Removable
    Drive C:\
      Drive type: Fixed
      Volume label: 
      File system: FAT32
      Available space to current user:     4770430976 bytes
      Total available space:               4770430976 bytes
      Total size of drive:                10731683840 bytes 
    Drive D:\
      Drive type: Fixed
      Volume label: 
      File system: NTFS
      Available space to current user:    15114977280 bytes
      Total available space:              15114977280 bytes
      Total size of drive:                25958948864 bytes 
    Drive E:\
      Drive type: CDRom
    
    The actual output of this code will vary based on machine and the permissions
    granted to the user executing it.
    */

    Saludos.


    http://electronica-pic.blogspot.com

    jueves, 13 de julio de 2017 18:39