来自 USB 相机的文件路径

Posted

技术标签:

【中文标题】来自 USB 相机的文件路径【英文标题】:File path from a usb camera 【发布时间】:2011-09-17 16:26:11 【问题描述】:

您好,我正在使用 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;

【问题讨论】:

我认为你这里有一个 WIA 设备显示在 shell 命名空间中。 IE。没有文件路径。您应该能够使用 WIA 获取图像。有关文档,请参阅 msdn.microsoft.com/en-us/library/windows/desktop/…。 【参考方案1】:

请看样例:GetImage Sample: Demonstrates the Windows Image Acquisition API:

示例应用程序的文件菜单上有一个命令,名为 从扫描仪或相机。当 WIA 设备(或设备仿真器) 附加,菜单项变为启用。当用户选择 菜单命令,样本将依次显示 WIA 设备 选择对话框、图像选择对话框和图像传输 对话框。设备和图像选择对话框是常见的 系统提供的对话框,传输对话框是 在此示例中实现。最后,样本将显示 在子窗口中传输图像。

希望这会有所帮助。

【讨论】:

【参考方案2】:

您需要了解 shell 如何处理特殊路径,这是一个好的开始: http://msdn.microsoft.com/en-us/library/bb773559%28v=vs.85%29.aspx

对于你正在做的很多事情,你应该使用 PathCanonicalize() 或类似的东西。 不确定这是否对您的相机有帮助,您可能需要直接访问图像采集 API 以从某些相机中获取文件。

【讨论】:

以上是关于来自 USB 相机的文件路径的主要内容,如果未能解决你的问题,请参考以下文章

如何显示来自相机的捕获图像并从文件路径显示在图像视图中? [复制]

如何检查所选路径是来自USB还是网络驱动器?

如何使用C#查找通过USB电缆连接的相机,这样我便可以复制存储的图像

反应本机相机不返回完整的文件路径

Cordova 相机返回 guid 不是 b64 或带有“xxx.png”的路径。需要上传文件

如何更改相机保存路径?