忍者ブログ
萌え指向プログラミング言語「萌香」のBlog
[9] [8] [7] [6] [5] [4] [3] [2]
×

[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

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
10 2019/11 12
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
性別:
非公開
バーコード
ブログ内検索
アクセス解析