アイコンにグラフィックファイルを結合するプログラムがあります。サイズには16,24,32,48,256 32bitが含まれます。これらはPNGを使用して動作します。私は正しいヘッダとディレクトリ/インデックスレコードリストを持っています。アイコンファイルにBMPを保存する
しかし、私は8ビットのためにBMPのヘッダの最初の14バイトを取り除いてBMPを使用しています。アイコンファイルのこの部分は機能しません。 MSアイコンを見ると、BMPは14バイトのヘッダを取り除いた状態で再び格納されています。彼らのBMPデータを見ると、私のように2番目のヘッダーがありますが、16x16では2番目のヘッダー(BITMAPINFOHEADER)は16x32と言います。 BMPの継ぎ目は、幅の2倍になります。どうして?ビットマスクなどでイメージの幅が2倍になっていますか?ここで
は私のコードです:(。渡されたときに注意画像は32×32ビットマップの32ビットである)
using (Bitmap imageAsBitmap = new Bitmap(image))
{
int colorCount = 0;
using (Bitmap bitmap = imageAsBitmap.ColourReduction256(out colorCount))
{
byte[] imageBytes = new byte[] { };
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
imageBytes = ms.ToArray();
}
byte[] data = new byte[] { };
Array.Resize(ref data, imageBytes.Length - 14);
Array.Copy(imageBytes, 14, data, 0, data.Length);
enteries.Add(new IconEntry(data, image.Width, image.Height, 8));
}
}
「Array.Resize」は不要です。データを 'new byte [imageBytes.Length - 14]'として宣言することができます。 – Abion47
@ Abion47大きさは分からないが、この場合は大量の通信を行っているので、ちょっと習慣を試してみてください。私はそれをより読みやすくするためにその部分を修正するかもしれません。ありがとう。 – James