Bitmap.Save para salvar um ícone, na verdade, salva um .png

Eu preciso escrever um programa que irá gerar 108 combinações de ícones (janelas padrão .ico arquivos) com base em uma imagem tileset.

Eu uso a classe System.Drawing.Bitmap para construir cada combinação, e eu salvá-los assim:

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);

Mas descobri que o arquivo salvo é na verdade um PNG. Nem o Windows Explorer nem o Visual Studio podem exibi-lo corretamente, mas o GIMP pode, e se eu abri-lo em um visualizador Hex, aqui está o que eu vejo:

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`‚

Além disso, se eu renomear o arquivo .ico para .png, o Windows Explorer poderá exibi-lo corretamente.

Eu tenho este resultado, mesmo que eu não faça nada no bitmap (eu construí-lo comnew eSave isso diretamente, isso me dá um png preto).

O que estou fazendo de errado?

Eu também tentei isso, o que me deu terríveis 16 ícones de cores, mas eu preferiria evitar essa solução de qualquer maneira (usando alças):

Icon NewIcon = Icon.FromHandle(IconBitmap.GetHicon());
FileStream FS = new FileStream(Path.Combine(Target, "Icon" + Counter + ".ico"),
        FileMode.Create);
NewIcon.Save(FS);

questionAnswers(3)

yourAnswerToTheQuestion