求助:有什么方法直接获取CAD自带的图标呢?
CAD自带的图标有很多,有的时候可以用的上,有没有什么方法可以根据图像的名字直接获取指定的图标呢?一直找不到CAD自带图标是放在哪个文件夹。
楼主找到方法了吗? 直接编辑,然后输出就可以了 j15tty 发表于 2018-9-17 21:51
直接编辑,然后输出就可以了
谢谢 ,不过我是想要在程序运行的过程中直接获取图标, 目前已经找到一个方法。可以获取部分图标。其他图标不知道存在于哪个DLL文件里面 本帖最后由 zjh2785 于 2018-9-26 16:41 编辑
红黑墨水 发表于 2018-9-16 20:20
楼主找到方法了吗?
找到了 只是只可以找出部分 ,在CAD安装目录下有一些文件名包含“res”特定名称的dll存在图标, 比如:xxxxres.dll有很多 ,可以一一尝试, 以下代码仅供参考:
/// <summary>
/// 获取文件中的图标
/// </summary>
/// <param name="fileName">dll或者exe文件名,如果在CAD安装目录、系统目录或是其他支持的目录</param>
/// <param name="iconIndex">图标索引 起始值为0</param>
/// <param name="size">图标尺寸 64x64 32x32 16x16 都可以 int型64代表64x64,也可以在函数内自己设定不等边尺寸</param>
/// <returns></returns>
public System.Drawing.Icon GetIcon(string fileName, int iconIndex, Size size)
{
try
{
var iconTotalCount = PrivateExtractIcons(fileName, 0, 0, 0, null, null, 0, 0);
if (iconTotalCount > 0 && iconIndex <= iconTotalCount)
{
IntPtr[] hIcons = new IntPtr;
int[] ids = new int;
var successCount = PrivateExtractIcons(fileName, iconIndex, size.Width, size.Height, hIcons, ids, 1, 0);
if (successCount > 0 && hIcons != IntPtr.Zero)
{
System.Drawing.Icon result = System.Drawing.Icon.FromHandle(hIcons);
return result;
}
}
return null;
}
catch
{
return null;
}
}
public static extern int PrivateExtractIcons(
string lpszFile, //file name
int nIconIndex,//The zero-based index of the first icon to extract.
int cxIcon, //The horizontal icon size wanted.
int cyIcon, //The vertical icon size wanted.
IntPtr[] phicon, //(out) A pointer to the returned array of icon handles.
int[] piconid, //(out) A pointer to a returned resource identifier.
int nIcons, //The number of icons to extract from the file. Only valid when *.exe and *.dll
int flags //Specifies flags that control this function.
);
测试代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
System.Drawing.Size size = new Size();
size.Width = Convert.ToInt32(numericUpDown1.Value);
size.Height = size.Width;
pictureBox1.Image = GetIcon(this.textBox1.Text, int.Parse(textBox2.Text), size).ToBitmap();
}
catch
{ }
} 楼主研究的真深 zjh2785 发表于 2018-9-26 16:40
找到了 只是只可以找出部分 ,在CAD安装目录下有一些文件名包含“res”特定名称的dll存在图标, 比如: ...
好厉害,试着保存了一下,图标比较模糊,有什么解决办法吗 ps122hb 发表于 2018-9-27 10:54
好厉害,试着保存了一下,图标比较模糊,有什么解决办法吗
有些dll立面的文件本身就是16x16的你用64x64的输出肯定会模糊 zjh2785 发表于 2018-9-27 11:17
有些dll立面的文件本身就是16x16的你用64x64的输出肯定会模糊
就是选的16X16也模糊,找了个工具导出效果还不错
页:
[1]