C++ usb摄像头的文件路径

C++ usb摄像头的文件路径,c++,vba,gdi+,wia,C++,Vba,Gdi+,Wia,您好,我正在使用GDI+做一些图像处理。我用两个参数从命令行运行它。原因是该程序是从VBA Excel 2007调用的。从VBA运行“打开文件”对话框,并给出第一个参数 第一个参数是要处理的原始图像,第二个参数是保存图像的位置。当这两个参数来自带字母的驱动器时,一切正常,即C: 它无法处理网络文件夹,即.\server\folder。我克服了这个问题,在尝试加载映像之前将文件夹装入驱动器号 我现在有一个问题,当传入的图像是在一个usb摄像头。相机上文件的文件路径最终为COMPUTER\Canon

您好,我正在使用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;
}
intmain(intargc,char*argv[])
{
GdiplusStartupInput GdiplusStartupInput;
ULONG_PTR gdiplusToken;
//初始化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';
网络资源;
德沃德·德雷特瓦尔;
nr.dwType=资源类型\ U盘;
nr.lpLocalName=“M:”;
nr.lpRemoteName=“\\\\server\\folder”;
nr.lpProvider=NULL;
//映射mugshots文件夹
dwRetVal=wnetadconnection2(&nr,NULL,NULL,CONNECT_-TEMPORARY);
//从命令行参数转换为wchar_t*
大小=strlen(argv[1])+1;
mbstowcs(tin,argv[1],原尺寸);
//为目录添加一个额外的\
int j=0;
for(int i=0;i保存(out,&pngClsid,NULL);
返回0;
}

您需要了解shell如何处理特殊路径,这里是一个良好的开端:

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

请查看示例:

示例应用程序的“文件”菜单上只有一个命令,名为 从扫描仪或照相机。当安装WIA设备(或设备模拟器)时 附加后,菜单项将变为启用状态。当用户选择 菜单命令,样本将按顺序显示WIA设备 选择对话框、图像选择对话框和图像传输 对话框。设备和图像选择对话框是常用的 系统提供的对话框,以及“传输”对话框 在这个示例中实现。最后,示例将显示 在子窗口中传输的图像


希望这能有所帮助。

我想您这里有一个WIA设备显示在shell名称空间中。即,没有文件路径。您应该能够使用WIA获取图像。有关文档,请参阅。