Путь к файлу с USB-камеры - PullRequest
10 голосов
/ 18 июня 2011

Здравствуйте. Я использую 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;
}

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Пожалуйста, посмотрите на образец: Пример GetImage: Демонстрирует API получения изображений Windows :

Пример приложения имеет одну команду в меню «Файл», которая называется Со сканера или камеры. Когда устройство WIA (или эмулятор устройства) прилагается, пункт меню становится активным. Когда пользователь выбирает команда меню, образец будет последовательно отображать устройство WIA Диалоговое окно «Выбор», «Выбор изображения» и «Передача изображения» диалоговое окно. Диалоговые окна выбора устройства и изображения являются общими диалоговые окна, предоставляемые системой, и диалоговое окно переноса реализовано в этом примере. Наконец, образец будет отображать перенесенные изображения в дочерние окна.

Надеюсь, это поможет.

0 голосов
/ 14 июля 2011

Вам нужно посмотреть, как shell обрабатывает специальные пути, хорошее начало здесь: http://msdn.microsoft.com/en-us/library/bb773559%28v=vs.85%29.aspx

Для большей части того, что вы делаете, вы должны использовать PathCanonicalize () или что-то в этом роде. Если вы не уверены, что это поможет вам с вашей камерой, вам может потребоваться прямой доступ к API получения изображений для получения файлов с некоторых камер.

...