.net 使用icon.ExtractAssociatedIcon和ImageList获取完整质量的16 x 16图标

.net 使用icon.ExtractAssociatedIcon和ImageList获取完整质量的16 x 16图标,.net,image,icons,.net,Image,Icons,按照上的说明,我运行了一些代码从文件中提取图标,并将它们显示在设置为详细信息模式的ListView中。我希望图标显示为16 x 16,但当我将ImageList的大小设置为16时,显示出来的图标看起来非常奇怪(不确定如何描述它-请参阅附带的屏幕截图) 我试过把尺寸改为32 x 32,结果很好,但肯定有办法得到高质量的16 x 16图标,不是吗 我认为,你必须使用两个图像列表,一个用于小图像,一个用于大图像才能获得最佳效果。(listview有两个属性,LargeImageList和SmallIm

按照上的说明,我运行了一些代码从文件中提取图标,并将它们显示在设置为详细信息模式的ListView中。我希望图标显示为16 x 16,但当我将ImageList的大小设置为16时,显示出来的图标看起来非常奇怪(不确定如何描述它-请参阅附带的屏幕截图)

我试过把尺寸改为32 x 32,结果很好,但肯定有办法得到高质量的16 x 16图标,不是吗


我认为,你必须使用两个图像列表,一个用于小图像,一个用于大图像才能获得最佳效果。(listview有两个属性,LargeImageList和SmallImageList)

编辑(在我尝试时找到有效的新信息):

这个版本都是用插值得到的拇指较小,应该更好

Dim BigIcon As Icon=Nothing
BigIcon=Icon.ExtractAssociatedIcon(“c:\zebra.zip”)
将大图像变暗为新图像列表
将小图像设置为新图像列表
添加(“1”,大图标)
'使用插值修复较小的版本
将bm变暗为新位图(BigIcon.ToBitmap)
将拇指调暗为新位图(16,16)
尺寸g为Graphics=Graphics.FromImage(拇指)
g、 插值模式=Drawing2D.InterpolationMode.HighQualityBicubic
g、 DrawImage(bm,新矩形(0,0,16,16),新矩形(0,0,bm.宽度,bm.高度),GraphicsUnit.像素)
g、 处置
bm.Dispose()
smallimages.Images.Add(“1”,拇指)
ListView1.SmallImageList=smallimages
ListView1.LargeImageList=largeimages
thumb.Dispose()
列表视图1.项目。添加(“测试”、“测试”、“1”)
使用此选项和,您可以编写以下内容:

FileAssociationInfo info = new FileAssociationInfo(".docx");

ProgramAssociationInfo pai = new ProgramAssociationInfo(info.ProgID);
ProgramIcon ico = pai.DefaultIcon;
Icon icoLarge = Martin.Hyldahl.Examples.ExtractIconEx.ExtractIconExample.ExtractIconFromExe(ico.Path, ico.Index, false);
您必须将ExtractIconFromExe的签名更改为

public static Icon ExtractIconFromExe(string file, int nIconIndex, bool large)
将代码改为

if (large)
   readIconCount = ExtractIconEx(file, nIconIndex, hIconEx, hDummy, 1);
else
   readIconCount = ExtractIconEx(file, nIconIndex, hDummy, hIconEx, 1);

通过defaut Imagelist ColorDepth属性设置为Depth8Bit,将其设置为Depth32位

很遗憾,这似乎不起作用-它们仍然显示不好。还有其他想法吗?谢谢。我尝试了你在编辑中建议的方法,使用DrawImage方法,但这似乎也不起作用-给出了完全相同的结果。如果有帮助的话,我可以发布我在DrawImage方法中使用的代码。编辑我的答案。我想这就行了。如果不是的话,我就没有主意了。任何能从我必须做的实际工作中吸引注意力的事情都很好!;)谢谢@HumerGu,我也能从中受益!