C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■100273 / 1階層)  カラービットマップの描画について
□投稿者/ radian (75回)-(2022/07/14(Thu) 15:27:56)
2022/07/14(Thu) 15:57:03 編集(投稿者)
No100272 (まさお さん) に返信
> 幅が4の倍数ではない201×100(仮)のイメージデータ(カラー)の描画をしたいのですがうまくいきません。
> 現在、下記のようにやっていますがMarshal.Copyのところでエラーになってしまいます。
> (エラー:'保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。')
> イメージデータを200×100にして下記引数の201を200にすると期待する描画ができます。
> 
> Bitmap bitmap = new Bitmap(201, 100, 204, PixelFormat.Format24bppRgb, IntPtr.Zero))
> BitmapData bitmapData = bitmap.LockBits(
>            		new Rectangle(0, 0, 201, 100),
>                 ImageLockMode.WriteOnly,
>                 PixelFormat.Format24bppRgb);
> Marshal.Copy(scan0, 0, bitmapData.Scan0, scan0.Length);     // ここでエラー

とりあえずデバッグして scan0.Lengthと、bitmapDataのStride*Height を確認してみてはいかがでしょう。
下記のコードで、pictureBox1が白色になるのは確認しましたが。

    private void button1_Click(object sender, EventArgs e)
    {
        var scan0 = Enumerable.Repeat<byte>(0xff, (((201 * 3) + 1) * 100) ).ToArray(); //+1はパディング(横一行バイト数を4の倍数にする)
        Bitmap bitmap = new Bitmap(201, 100, 204, PixelFormat.Format24bppRgb, IntPtr.Zero);
        BitmapData bitmapData = bitmap.LockBits(
                    new Rectangle(0, 0, 201, 100),
                 ImageLockMode.WriteOnly,
                 PixelFormat.Format24bppRgb);
        Marshal.Copy(scan0, 0, bitmapData.Scan0, scan0.Length);
        bitmap.UnlockBits(bitmapData);
        pictureBox1.Image = bitmap;
    }

24bitBMPはパディング考慮する必要があり、画像処理する時に32bit単位で1ピクセル纏めて処理とかもしづらいので、32bitBMPの方が扱いやすいと思います。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←カラービットマップの描画について /まさお →Re[2]: カラービットマップの描画について /まさお
 
上記関連ツリー

カラービットマップの描画について / まさお (22/07/14(Thu) 14:27) #100272
カラービットマップの描画について / radian (22/07/14(Thu) 15:27) #100273 ←Now
│└ Re[2]: カラービットマップの描画について / まさお (22/07/15(Fri) 10:28) #100284
│  └ Re[3]: カラービットマップの描画について / KOZ (22/07/15(Fri) 11:42) #100297
│    └ Re[4]: カラービットマップの描画について / radian (22/07/15(Fri) 11:46) #100300
│      └ Re[5]: カラービットマップの描画について / KOZ (22/07/15(Fri) 12:26) #100302
│        └ Re[6]: カラービットマップの描画について / radian (22/07/15(Fri) 12:34) #100303
│          └ Re[7]: カラービットマップの描画について / KOZ (22/07/15(Fri) 12:53) #100304
│            └ Re[8]: カラービットマップの描画について / radian (22/07/15(Fri) 13:04) #100305
│              └ Re[9]: カラービットマップの描画について / kiku (22/07/15(Fri) 13:13) #100306
│                └ Re[10]: カラービットマップの描画について / radian (22/07/15(Fri) 13:17) #100307
Re[1]: カラービットマップの描画について / kiku (22/07/14(Thu) 15:37) #100274
  └ Re[2]: カラービットマップの描画について / radian (22/07/15(Fri) 11:13) #100288
    └ Re[3]: カラービットマップの描画について / まさお (22/07/15(Fri) 11:28) #100291
      ├ Re[4]: カラービットマップの描画について / radian (22/07/15(Fri) 11:30) #100292
      └ Re[4]: カラービットマップの描画について / kiku (22/07/15(Fri) 11:38) #100295
        └ Re[5]: カラービットマップの描画について / まさお (22/07/15(Fri) 18:34) #100320 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信