您的位置:首页 > 其它

用最快速度编写和发布的图标导出工具v1.0版

2007-11-14 04:03 351 查看
=============================================================================================

声明【1】:这篇文章中的代码在写ICO文件时的方法并不够完善和准确。因此保存ICO文件时会有些小问题。目前看来,有两种方法,可能需要把微软的C++的范例源码借鉴并引入到C#项目中,另一种是把该范例改写为一个DLL,然后用PInvoke方式调用。总之,不管采用哪种解决方法,将会改变本文中的技术路线,因为代码修改量比较大,细节也非常繁琐,因此这不是一个短时间内可以完成的任务,暂且放置这样一个声明于此,以提醒借鉴者能注意(这个声明的原因是,一是对自己,本着求是和追求完美的态度,我不能容忍自己的技术日志有缺陷乃至关键性的逻辑错误;二是对他人,本着对潜在读者负责的态度,尽可能不对他人造成误解和负面影响)。我将在时间充裕的时候尽可能快的解决这个问题(有问题的代码暂时放置于此)。

------ hoodlum1980 于 2008年9月26日20:19:02。

============================================================================================

=============================================================================================

  声明【2】:时隔两年后,我重新研究了一下ICO文件格式,并修改了代码。因此声明 1 作废。具体细节已补充到原文结尾处。

------ hoodlum1980 于 2010年8月23日

============================================================================================

最近发现我的自动关机程序的图标有点丑陋和粗糙,(是我自己制作的一个qq的老鼠头像),放在桌面上和其他xp图标一比不免相形见绌。于是突发奇想想把自动关机程序的图标换成系统的关机图标,于是我就想导出这个图标。这个图标的位置位于system32目录下的shell32.dll中,vs.net本身就可以直接打开一个模块的资源,但是我发现由于这个dll的图标太多,并且vs.net并没有提供一个方便的预览功能,所以一个个打开查看还是太慢了。于是想起这种图标导出工具很多,但是下载了几个下来一看却让我非常不爽和郁闷。因为这么简单的功能,我下了4~5个竟然没有一个免费版本,都是试用版并且注册要收费的。虽然它们安装以后能用,但是都提示你只能用10次以及经常弹出注册之类的提示,让我感到很生气。所以我干脆自己实现一个简单的。于是决定用开发一个自己用,并且把源码公开。其实很久前就有人给我看过这类工具,但是由于我觉得vs.net就能打开和导出了,再者也有人做了,所以我一直没有关注过,只是看了下相关API函数。

首先是一个应用程序截图:
代码_写入ANDMASK

//写入AND Mask , 1 bpp
stride = (1 * bm.Width + 31) / 32 * 4; //and mask 以DWORD对齐后的扫描行宽度
byte[] line = new byte[stride];

for (int j = bm.Height-1; j >=0; j--)
{
for (int i = 0; i < stride; i++)
line[i] = 0;

//处理当前扫描行
for (int i = 0 ; i < bm.Width; i++)
{
Color color = bm.GetPixel(i, j);
int colorsum = color.R + color.G + color.B;
if (colorsum == 0)
{
//在位图中是黑色说明该像素应该是透明的
line[i/8] |= (byte)(1<< (7 - (i & 0x07))); //i&7: 相当于i%8
}
}
bw.Write(line, 0, stride);
}

    修正以上两个问题以后,导出的图标可以在IDE中打开,显示正常,可以正常使用了!

---------------------------------------------------------------------------------------------
最后是项目源代码(build by vs.net 2005 trial)的下载链接:(已经解决声明1中存在的问题)

http://files.cnblogs.com/hoodlum1980/IconExp.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐