你好,我正在使用GDI +做一些圖像處理。我使用兩個參數從命令行運行。原因是程序正在從VBA Excel 2007中調用。打開文件對話框從VBA運行並提供第一個參數。來自USB攝像頭的文件路徑
第一個參數是要處理的原始圖像,第二個參數是保存圖像的位置。當兩個參數來自帶有字母的驅動器,即C:時,一切正常。
它不適用於網絡文件夾,即\ server \文件夾。我試圖加載圖像之前,通過將文件夾掛載到驅動器號來克服這一點。
當傳入的圖像在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;
}
我想你在這裏是在shell命名空間中顯示的WIA設備。即沒有文件路徑。您應該可以使用WIA獲取圖像。有關文檔,請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx。 – Ben