Hola Estoy usando GDI + para hacer algo de procesamiento de imágenes. 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.Ruta del archivo desde una cámara usb
El primer argumento es la imagen original que debe procesarse 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 las 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 todas sean dobles \.
No estoy seguro de cómo hacer que esto funcione y lo he examinado por completo. 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;
}
Creo que lo que tienes aquí es un dispositivo WIA que se muestra en el espacio de nombres del shell. Es decir. no hay ruta de archivo Debería poder adquirir la imagen usando WIA. Consulte http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx para obtener documentación. – Ben