2011-06-18 23 views
10

こんにちは私はGDI +を使用して画像処理を行っています。私はそれを2つの引数でコマンドラインから実行させています。この理由は、プログラムがVBA Excel 2007から呼び出されているためです。開いているファイルダイアログはVBAから実行され、最初の引数が与えられます。usbカメラからのファイルパス

最初の引数は処理される元の画像であり、2番目の引数は画像を保存する場所です。 2つの引数がドライブ文字(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

ここであなたが持っているのは、シェル名前空間に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デバイス 選択ダイアログボックス、画像選択ダイアログボックス、画像転送 ダイアログボックスが順番に表示されます。デバイスとイメージの選択ダイアログボックスは、システムによって提供される共通の ダイアログボックスで、このサンプルでは転送ダイアログボックスは です。最後に、サンプルには子ウィンドウに 転送された画像が表示されます。

これが役立ちます。

関連する問題