原本我程序里用的的图标都是网上下载或者在线用png转成ico,但是之前那个公司不能上外网,而ps和fw都不能直接生成ico格式(ps可以找转ico的插件)。后来,网上找了个C#图片转ico的例子,借助的Icon类,但是生成的图效果不太好,透明图部分会有黑线(预览)。于是乎就折腾了半天ico格式的协议,主要参考的是https://www.cnblogs.com/cswuyg/p/3603707.html以及他的相关参考,还有http://lqzit.iteye.com/blog/1033407。除了掩码没搞明白,其他基本都清楚了,然后根据在线转换网站生成的格式来作为参照,完成了生成ico的功能。(其实可以直接参照开源软件ImageMagick的代码,在源码包的coders文件夹里有各种图的格式,我也是后来才知道,ImageMagick中文网:http://www.imagemagick.com.cn/download.html)
如果要了解icon相关的协议,可以百度或者看我最上面那个链接,这里我只写下我的实现。生成的是32色RGBA的ico图,在xp/win7/win10下显示正常,预览没有发现有黑线。
首先,ico结构=Icon格式头+位图格式头+位图数据(数据行是反过来的,第一行在最后)+位图掩码部分。
(代码中Byte一个字节,Word两个字节,Long和DWord四个字节,小端模式--即低位在前)
第一部分:Icon格式头(22Byte)
struct IconHeader
{
WORD idReserved; // 保留位必须为0
WORD idType; // 类型 (1表示icon),也就是必须为1
WORD idCount; // 包含多少张图(icon可以含多张图,分别在不同尺寸下展示)
ICONDIRENTRY idEntries[]; // 对应idCount的结构体,多少张图就有多少个该结构
};
struct ICONDIRENTRY
{
BYTE bWidth; // 图片的像素宽度
BYTE bHeight; // 图片的像素高度
BYTE bColorCount; // 颜色深度:=1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?