2011-06-18 51 views
10

你好,我正在使用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; 
} 
+2

我想你在這裏是在shell命名空間中顯示的WIA設備。即沒有文件路徑。您應該可以使用WIA獲取圖像。有關文檔,請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx。 – Ben

回答

0

你需要尋找到殼如何處理的特殊路徑,一個良好的開端是在這裏: http://msdn.microsoft.com/en-us/library/bb773559%28v=vs.85%29.aspx

對於很多你在做什麼,你應該用PathCanonicalize()或東西沿這些線。 不確定這是否可以幫助您使用相機,您可能需要直接訪問圖像採集API以從某些相機中獲取文件。

1

請看一看樣品:GetImage Sample: Demonstrates the Windows Image Acquisition API

示例應用程序的文件菜單,名爲 從掃描儀或相機上的單個命令。當連接WIA設備(或設備模擬器) 時,菜單項變爲啓用狀態。當用戶選擇 菜單命令時,示例將依次顯示WIA設備 選擇對話框,圖像選擇對話框和圖像傳輸對話框。設備和圖像選擇對話框是系統提供的常用對話框 ,此示例中實現的傳輸對話框爲 。最後,樣本將在子窗口中顯示 傳輸的圖像。

希望這會有所幫助。