我使用IShellFolder界面获取文件/文件夹列表。
从这个列表中我想加载一个图像文件(让他们说一个" someimage.bmp"文件)到TBitmap中。当我从本地硬盘获取文件列表时没问题,但我需要从便携式设备加载图像。例如,我有Sony Xperia C,我从DCIM文件夹中获取了一个图像列表,
var
pShell, Desktop: IShellFolder;
FolderPIDL, ItemPIDL: PITEMIDLIST;
PMalloc: IMalloc;
xperia: string;
EnumIDList: IEnumIDList;
pceltFetched: ULONG;
FileExt:String;
begin
try
SHGetDesktopFolder(Desktop);
xperia:= '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_0fce&pid_51a3&mi_00#7&12ccae3c&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}';
GetPIDLFromPath(handle, xperia, FolderPIDL);
SHGetMalloc(PMalloc);
Desktop.BindToObject(FolderPIDL, nil, IID_IShellFolder, Pointer(pShell));
pShell.EnumObjects(0,SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_STORAGE, EnumIDList);
while EnumIDList.Next(1,ItemPIDL, pceltFetched) = S_ok do
begin
pceltFetched := 0;
FileExt:= GetExtension(pShell, ItemPIDL);
Memo1.Lines.Add(FileExt);
if FileExt = '.jpg' then begin
/// Creating TBitmap
///
/// How to LOAD ????
///
///
///
///
end
end;
finally
pMalloc._Release;
pMalloc := nil;
end;
但是每张图片的路径都是这样的:
:: {20D04FE0-3AEA-1069-A2D8-08002B30309D} \\ \ USB#vid_0fce&安培; pid_51a3&安培; MI_00#7和; 12ccae3c&安培0安培; 0000#{6ac27878-a6fa-4155-BA85-f98f491d4f33} \ SID- {10001,65537,16003366912} {000007DC-0001-0001-0000-000000000000} {000015DC-0001-0001-0000-000000000000} {000015E0-0001-0001-0000-000000000000}
我可以将此路径转换为:My Computer \ Xperia C \ DCIM \ 100ANDRO \ DSC_0004.JPG但TBitmap.LoadFomFile()当然不了解任何路径。 我想也许我需要将这些图像复制到一些临时文件夹然后做所有的工作人员,但它会太慢而且不是一个好的选择。
另一种方法是使用IExtractImage但是,我真的需要知道是否有另一种方法来处理存储在便携式设备中的文件(不仅仅是图像)。
如果有人知道该怎么做,请帮助我。感谢。