Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否提取分配给文件的正确16x16图标?_C#_.net_Icons_Shell Icons - Fatal编程技术网

C# 是否提取分配给文件的正确16x16图标?

C# 是否提取分配给文件的正确16x16图标?,c#,.net,icons,shell-icons,C#,.net,Icons,Shell Icons,我将SHGetFileInfo和ExtractIconEx绑定在一起,它们都返回一个普通的32x32图标和16x16,只有16种颜色,看起来很糟糕。如何提取全彩图标 我的代码 SHFILEINFO shinfo = new SHFILEINFO(); IntPtr hImgSmall = SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON); Icon

我将SHGetFileInfo和ExtractIconEx绑定在一起,它们都返回一个普通的32x32图标和16x16,只有16种颜色,看起来很糟糕。如何提取全彩图标

我的代码

SHFILEINFO shinfo = new SHFILEINFO();
IntPtr hImgSmall = SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
Icon icon = (Icon)System.Drawing.Icon.FromHandle(shinfo.hIcon).Clone();
DestroyIcon(shinfo.hIcon);
我试过这个例子,效果很好……用alpha通道得到了16*16。
试试看。

你试过以下方法吗

Icon LargeIcon = Icon.ExtractAssociatedIcon(fileName);
Icon SmallIcon = new Icon(LargeIcon, 16, 16);

您可以在此处找到工作指南:

您确定要提取的小图标文件具有全彩16x16图标吗?至少windows资源管理器显示了它。这很奇怪,它必须起作用,至少在我的情况下起作用。您绝对需要图标,或者图像也是可以接受的?我最终将图标转换为Icon.ToBitmap()。您可以在上面看到的结果。提取的图标只有位图,因此它会扭曲图像。请确认此操作是否有效。看来你必须调用ToBitmap(),否则你只能得到16种颜色!谢谢,这是我唯一能去上班的。我在谷歌上找到了20个。这条规则!