午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

赤以外白黒と一部の透明グラデーション画像処理が20倍以上速くなったPixtack紫陽花


LockBitsを使って画像処理を高速化してみた
よくわかっていないので試しに「赤以外を白黒」と「グラデ4」だけ対応
イメージ 1
 
 
今まではカラーマトリックスを使わない画像処理はGetPixelを使っていた
今回のはLockBitsっていうのを使った結果、20倍以上速くなった
イメージ 2
1000x1000 = 1000000ピクセルの画像に
グラデ4(斜めの半透明グラデーション)のときの時間計測
ピクセル数の次の行がLockBitsで
その次の行がGetPixelのときの時間で
6秒かかっていたのが0.2秒になる
下のほうにある処理ピクセル数20301はグラデーション範囲を1割にした時のもの
環境
CPU PhenomII 720 (1.6GHzに固定)

f:id:gogowaten:20191014111705p:plain

 
劇的に速くなったのいいんだけど
LockBitsの使い方がイマイチ理解できていない
 
参照したところ
画像のカラーバランスを補正して表示する: .NET Tips: C#, VB.NET
http://dobon.net/vb/dotnet/graphics/colorbalance.html
画像を読み込み編集する1 (LockBits) - Nova's HomePage
https://sites.google.com/site/novashomepage/home/bitmap/lockbits/lockbitssample1
Mr.Exception 画像処理にGetPixel/SetPixelを使っていませんか?
http://xptn.dtiblog.com/blog-entry-99.html
Bitmap.LockBits メソッド (Rectangle, ImageLockMode, PixelFormat) (System.Drawing)
http://msdn.microsoft.com/ja-jp/library/5ey6h79d(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
ダウンロードファイル名 Pixtack_20140127.zip