VS2022のC#のFormAppの Bitmapの画像に関する質問です。 Q1)下記のコードでBMP画像の濃さが白から黒へ順次変化
VS2022のC#のFormAppの Bitmapの画像に関する質問です。 Q1)下記のコードでBMP画像の濃さが白から黒へ順次変化 するようにする為のコードがあれば、お教え頂けますと大変有難いです。 注)現在は、白で変化しない様です。 private void button1_Click(object sender, EventArgs e) { // これなら設定できる var bmp = new Bitmap(256, 64, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); var pal = bmp.Palette; for (int i = 0; i < 256; i++){ int j = 255-i; pal.Entries[i] = Color.FromArgb((byte)j, (byte)j, (byte)j); } bmp.Palette = pal; bmp.Save("Grayscale.bmp"); Graphics g; g=pictureBox1.CreateGraphics(); g.DrawImage(bmp, 0, 0); } 以上、宜しくお願いします。
Q2)unsafeでpointerを使用してBMPデーターセットすれば、そのデーター に対応するパレットからColorを取りだし表示出来ると思います。 この過程がないので、BMPの全ての要素はクリヤーされており、 このクリヤーに対応するColorを表示すると思います。 以上、宜しくお願いします。
C言語関連・64閲覧・25
ベストアンサー
// usingの追加 using System.Drawing.Imaging; using System.Runtime.InteropServices; // パレットデータを作成した後に // LockBisメソッドでBitmapDataを取得 BitmapData bData = bmp.LockBits(new Rectangle(0,0,256,64),ImageLockMode.WriteOnly,PixelFormat.Format8bppIndexed); // Byte配列のイメージバッファを作成 int bufLength = bData.Height * bData.Stride; byte[] buf = new byte[bufLength]; for (int y=0; y < bData.Height;y++) for(int x = 0; x < bData.Width;x++) { buf[y * bData.Stride + x] = (byte)x; } // bmpの画素イメージにコピー Marshal.Copy(buf, 0, bData.Scan0, bufLength); // UnlockBitsで解放 bmp.UnlockBits(bData); // ファイル名だけの場合 png保存されるかも … bmp.Save("Grayscale.bmp", ImageFormat.Bmp); pictureBox1.Image = bmp;
下記のパレットを追加して実行しました所、 添付ファイルのような表示結果だ出ました。 var bmp = new Bitmap(256, 64, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); var pal = bmp.Palette; for (int i = 0; i < 256; i++) { int j = i; pal.Entries[i] = Color.FromArgb((byte)j, (byte)j, (byte)j); } 以上、宜しくお願いします。
質問者からのお礼コメント
回答有難う御座いました。
お礼日時:5/24 8:03