Здравствуйте, я использую GDI + для обработки некоторых изображений. Я запускаю его из командной строки с двумя аргументами. Причина этого заключается в том, что программа вызывается из VBA Excel 2007. Диалоговое окно "Открыть файл" запускается из VBA и дает первый аргумент.
Первый аргумент - это исходное изображение, которое нужно обработать, а второе - для сохранения изображения. Все работает отлично, когда два аргумента приходят с диска с буквой, т.е. C:.
Он не работал с сетевыми папками, то есть \server\folder. Я преодолел это, установив папку на букву диска, прежде чем пытаться загрузить изображение.
У меня проблема, когда входящее изображение находится на USB-камере. Путь к файлу файла в камере заканчивается как COMPUTER\Canon\DCIM\image.jpg. Windows не устанавливает камеру на буквенный диск, поэтому она не работает правильно для меня.
Прежде чем пытаться загрузить изображение, я добавляю и добавляю "\", чтобы все они были двойными.
Я совсем не уверен, как заставить это работать, и все посмотрело. Спасибо.
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;
}