c++ - solo - Ruta de archivo desde una cámara usb
respaldar usb automaticamente (2)
Debe investigar cómo funciona el shell en las rutas especiales, un buen comienzo es aquí: http://msdn.microsoft.com/en-us/library/bb773559%28v=vs.85%29.aspx
Por mucho de lo que está haciendo, debería usar PathCanonicalize () o algo similar. Si no está seguro de que esto lo ayude con su cámara, es posible que necesite acceder a las API de adquisición de imágenes directamente para extraer archivos de algunas cámaras.
Hola. Estoy usando GDI + para hacer un procesamiento de imagen. Lo estoy ejecutando desde la línea de comando con dos argumentos. La razón de esto es que el programa se llama desde VBA Excel 2007. Se abre un diálogo de archivo abierto desde VBA y proporciona el primer argumento.
El primer argumento es la imagen original que se procesará y el segundo es dónde guardar la imagen. Todo funciona bien cuando los dos argumentos provienen de un disco con una letra, es decir, C :.
No funcionaba con carpetas de red, es decir, / server / folder. Superé esto montando la carpeta en una letra de unidad antes de intentar cargar la imagen.
Tengo un problema ahora cuando la imagen entrante está en una cámara usb. La ruta del archivo del archivo en la cámara termina siendo COMPUTER / Canon / DCIM / image.jpg. Windows no está montando la cámara en una unidad con letras por lo que no está funcionando correctamente para mí.
Antes de intentar cargar la imagen, agrego un extra ''/' para que todos sean dobles /.
No estoy seguro de cómo hacer que esto funcione y lo he buscado todo. Gracias.
int main(int argc, char* argv[])
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
// INITIALIZE GDI+
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
wchar_t tin[200] = L"";
wchar_t in[200] = L"";
wchar_t out[200] = L"";
wchar_t tout[200] = L"";
NETRESOURCE nr;
DWORD dwRetVal;
nr.dwType = RESOURCETYPE_DISK;
nr.lpLocalName = "M:";
nr.lpRemoteName = "////server//folder";
nr.lpProvider = NULL;
// Map the mugshots folder
dwRetVal = WNetAddConnection2(&nr, NULL, NULL, CONNECT_TEMPORARY);
// Convert to a wchar_t* from command line argument
size_t origsize = strlen(argv[1]) + 1;
mbstowcs( tin, argv[1], origsize);
//Add an extra / for directory
int j = 0;
for (int i = 0 ; i < int(origsize) ; i++)
{
if(tin[i] == ''//')
{
in[j] = ''//';
j++;
in[j] = ''//';
j++;
}
else
{
in[j] = tin[i];
j++;
}
}
// Convert to a wchar_t* from command line argument
origsize = strlen(argv[2]) + 1;
mbstowcs(tout, argv[2], origsize);
//Add an extra / for directory
out[0] = ''M'';
out[1] = '':'';
out[2] = ''//';
out[3] = ''//';
j = 4;
for (int i = 0 ; i < int(origsize) ; i++)
{
if(tout[i] == ''//')
{
out[j] = ''//';
j++;
out[j] = ''//';
j++;
}
else
{
out[j] = tout[i];
j++;
}
}
Bitmap b(in);
Process image
CLSID pngClsid;
GetEncoderClsid(L"image/jpeg", &pngClsid);
image2->Save(out, &pngClsid, NULL);
return 0;
}
Eche un vistazo a la muestra: GetImage Sample: Demuestra la API de adquisición de imágenes de Windows :
La aplicación de muestra tiene un solo comando en su menú Archivo, llamado Desde escáner o cámara. Cuando se conecta un dispositivo WIA (o un emulador de dispositivo), el elemento del menú se habilita. Cuando el usuario selecciona el comando de menú, la muestra mostrará secuencialmente el cuadro de diálogo Selección de dispositivo WIA, el cuadro de diálogo Selección de imagen y el cuadro de diálogo Transferencia de imagen. Los cuadros de diálogo de selección de dispositivo y de imagen son los cuadros de diálogo comunes que proporciona el sistema, y el cuadro de diálogo de transferencia se implementa en esta muestra. Finalmente, la muestra mostrará la (s) imagen (es) transferida (s) en ventana (s) hija (s).
Espero que esto ayude.