来自USB相机的文件路径

10

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

2
我认为你在这里看到的是一个在shell命名空间中显示的WIA设备。也就是说,没有文件路径。你应该能够使用WIA获取图像。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx以获取文档。 - Ben
2个回答

1
请查看示例:获取图像示例:演示Windows图像采集API

该示例应用程序在其文件菜单上有一个命令,名为“从扫描仪或相机获取”。当连接了WIA设备(或设备仿真器)时,菜单项变为可用。当用户选择菜单命令时,示例将依次显示WIA设备选择对话框、图像选择对话框和图像传输对话框。设备和图像选择对话框是系统提供的公共对话框,传输对话框在此示例中实现。最后,示例将在子窗口中显示传输的图像。

希望这可以帮助您。

0

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

对于你正在做的大部分工作,你应该使用PathCanonicalize()或类似的函数。 不确定这是否有助于你的相机问题,你可能需要直接访问图像采集API来获取一些相机中的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接