忍者ブログ
萌え指向プログラミング言語「萌香」のBlog
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Bitmap#(set|get)Pixelは遅い

.Net Frameworkで画像ファイルにフィルタなどの処理で たくさんのピクセルの値を変更したい場合(set|get)Pixelメソッドを 使用するとめちゃくちゃ遅いです。これはBitmapオブジェクトが 単なる画像のコンテナじゃなくて他のいろんなものとの調停とか があるからかな ?

とりあえず遅いです

そこで.Net Framework的にはBitmapデータの 画像データをロックして自由にいじっても大丈夫なようにし、 いじってアンロックするというのが作法みたいです。

手順

  1. Bitmap#LockBitsメソッドを使いBitmapDataオブジェクトを獲得する。
  2. 得られたBitmapDataオブジェクトから画像データをコピー。 具体的には
    System.Runtime.InteropServices.Marshal.copy(bitmapdata.Scan0, (Byte[] buffer, (int)開始点, (int)長さ)
    
  3. (Byte[])bufferを適当にいじる
  4. いじった画像データを元のBitmapDataオブジェクトにコピー。 具体的には
    System.Runtime.InteropServices.Marshal.copy(Byte[] buffer, (int)開始点, bitmapData.Scan0, (int)長さ)
    
  5. bitmapImage.UnlockBits(bitmapData) とかやって元のbitmap imageに変更を適用

See MemoNyanDum - Bitmap の内部色データにアクセスする

PR


忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
最新CM
[11/30 Lehar9296 ]
[11/19 Bihler7840 ]
[04/09 pavelvolinkins]
最新TB
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
アクセス解析