c# - 我怎样才能知道图标是否相同?
问题描述
这些天我正在做一个文件浏览器。
我得到这样的文件和目录的图标。
public static ImageSource FindIconForDirectory(string DirectoryName)
{
SHFILEINFO shinfo = new SHFILEINFO();
SHGetFileInfo(
DirectoryName,
0, ref shinfo, (uint)Marshal.SizeOf(shinfo),
SHGFI_ICON | SHGFI_LARGEICON);
using (Icon i = System.Drawing.Icon.FromHandle(shinfo.hIcon))
{
ImageSource img = Imaging.CreateBitmapSourceFromHIcon(
i.Handle,
new Int32Rect(0, 0, i.Width, i.Height),
BitmapSizeOptions.FromEmptyOptions());
}
return img;
}
public static ImageSource FindIconForFilename(string fileName)
{
var icon = System.Drawing.Icon.ExtractAssociatedIcon(fileName);
return Imaging.CreateBitmapSourceFromHIcon(
icon .Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
我从 StackOverflow 得到了上面这两种不同的方法。SHFILEINFO 方式奇怪地有时会System.ArgumentException: 'Arg_ArgumentException Arg_ParamName_Name'
在获取文件的图标时报告错误,我必须使用另一种方式来实现它。
现在我遇到了一个问题。一开始,我将文件的每个 ImageSource 存储在一个 List 中。但是,我们知道有些目录包含许多文件和目录(例如 C:\windows\system32)。获取和存储 ImageSource 需要很长时间。(PS:我在 C:\windows\system32 中进行了测试。加载所有文件信息(不带图标)大约需要 3 秒,加载所有文件信息(带图标)大约需要 30 秒)
有这么多文件和目录有相同的图标。所以没有必要存储一个全新的 ImageSource 预文件/目录。
我无法通过文件扩展名来实现这一点。如您所知,几乎每个 .exe 都有不同的图标。
我怎样才能知道图标是否相同?谢谢你。
解决方案
推荐阅读
- node.js - 如何在节点中使用 crypto.createDecipheriv 解密流?
- ios - Xcode:'没有这样的模块' - 从 Git 中提取项目后
- python - 人类可读或工程风格漂浮在 Pandas 中?
- mysql - 具有特定条件的最长连续 SQL 查询
- shell - 詹金斯管道 - 错误的替换错误
- javascript - 反应添加新的数组方法以通过它的键返回数组的对象项
- android - 我在android studio中遇到过这些错误?
- c - float cf = *(float *)&ci; 是什么意思?在C里做什么?
- environment-variables - 关于在常规组件/插件之外使用 Nuxt 的 privateRuntimeConfig 变量的问题
- sql - Vertica:如果未找到记录,则返回零