我需要编写一个程序,基于一张图块集合的图片生成108种图标(标准的Windows .ico文件)。
我使用 System.Drawing.Bitmap 类来构建每个组合,并将它们保存如下:
Bitmap IconBitmap = new Bitmap(16, 16);
// Some processing, writing different parts of the source tileset
// ...
IconBitmap.Save(Path.Combine(TargetPath, "Icon" + Counter + ".ico"),
ImageFormat.Icon);
但我发现保存的文件实际上是PNG格式。无论是Windows资源管理器还是Visual Studio都无法正确显示它,但GIMP可以,并且如果我在十六进制查看器中打开它,这就是我看到的内容:
00000000 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 ‰PNG........IHDR
00000010 00 00 00 10 00 00 00 10 08 06 00 00 00 1F F3 FF ..............óÿ
00000020 61 00 00 00 01 73 52 47 42 00 AE CE 1C E9 00 00 a....sRGB.®Î.é..
00000030 00 04 67 41 4D 41 00 00 B1 8F 0B FC 61 05 00 00 ..gAMA..±..üa...
00000040 00 09 70 48 59 73 00 00 0E C3 00 00 0E C3 01 C7 ..pHYs...Ã...Ã.Ç
00000050 6F A8 64 00 00 00 15 49 44 41 54 38 4F 63 60 18 o¨d....IDAT8Oc`.
00000060 05 A3 21 30 1A 02 A3 21 00 09 01 00 04 10 00 01 .£!0..£!........
00000070 72 A5 13 76 00 00 00 00 49 45 4E 44 AE 42 60 82 r¥.v....IEND®B`‚
如果我将.ico重命名为.png,Windows资源管理器可以正确显示它。
即使我对位图什么都不做(我使用“new”构建它并直接“Save”),也会得到黑色的png文件。
我做错了什么?
我还尝试过使用句柄来解决这个问题,但这给了我可怕的16色图标,我更愿意避免这种方法:
Icon NewIcon = Icon.FromHandle(IconBitmap.GetHicon());
FileStream FS = new FileStream(Path.Combine(Target, "Icon" + Counter + ".ico"),
FileMode.Create);
NewIcon.Save(FS);