在windowsxp下从位图创建图标
本文关键字:创建 图标 位图 windowsxp | 更新日期: 2023-09-27 18:23:57
我在windowsxp下创建图标时遇到问题。这是我的代码:
void SaveAsIcon(Bitmap SourceBitmap, string FilePath)
{
FileStream FS = new FileStream(FilePath, FileMode.Create);
// ICO header
FS.WriteByte(0); FS.WriteByte(0);
FS.WriteByte(1); FS.WriteByte(0);
FS.WriteByte(1); FS.WriteByte(0);
// Image size
FS.WriteByte((byte)SourceBitmap.Width);
FS.WriteByte((byte)SourceBitmap.Height);
// Palette
FS.WriteByte(0);
// Reserved
FS.WriteByte(0);
// Number of color planes
FS.WriteByte(0); FS.WriteByte(0);
// Bits per pixel
FS.WriteByte(32); FS.WriteByte(0);
// Data size, will be written after the data
FS.WriteByte(0);
FS.WriteByte(0);
FS.WriteByte(0);
FS.WriteByte(0);
// Offset to image data, fixed at 22
FS.WriteByte(22);
FS.WriteByte(0);
FS.WriteByte(0);
FS.WriteByte(0);
// Writing actual data
SourceBitmap.Save(FS, ImageFormat.Png);
// Getting data length (file length minus header)
long Len = FS.Length - 22;
// Write it in the correct place
FS.Seek(14, SeekOrigin.Begin);
FS.WriteByte((byte)Len);
FS.WriteByte((byte)(Len >> 8));
FS.Close();
}
它在vista和更高的环境下工作正常。
我不知道在windowsxp下从位图创建图标的方法应该改变什么。
当我尝试用上面的方法使用图标时,我得到了这个错误:
生成Win32资源时出错:读取图标时出错
在vista、7和8下,它是有效的。
SourceBitmap.Save(FS, ImageFormat.Png);
XP不支持PNG格式的图标,直到Vista才添加该功能。
如果XP支持很重要,则需要回退到BMP格式。请注意,仅仅更改ImageFormat是不够的,您需要确保像素格式与您在标头中写入的内容相匹配,并且不应该写入BITMAPFILEHEADER。换句话说,跳过Save()方法写入的前14个字节。