午後わてんのブログ

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

透明グラデーションの強度を設定できるようにしたPixtack紫陽花

昨日見つけたマウスで移動した後の透過処理の不具合を解消
透明グラデーションのボタンの名称変更、グラデ2→左、グラデ3→左右、グラデ4’→左上
透明グラデーションの高速化、LockBitsを横、左右にも適用
透明グラデーションの強度を設定できるようにした
四角形作成にも2色グラデーションと透明度を設定できるようにした
 
透明グラデーションの強度
イメージ 1
テスト機能→透明、半透明タブ
 

f:id:gogowaten:20191014112726p:plain

強さは1から10の10段階
強さを指定して右にある方向のボタンを押すと選択画像に
透明グラデーションが適用される
 
 
昨日の文字の2色グラデーションと同じように四角形作成にも使えるようにした
イメージ 3
 

f:id:gogowaten:20191014112746p:plain

グラデーションの方向の指定は色に対して適用される
不透明度は0で透明、255で不透明
 
ダウンロード
ファイル名 Pixtack_20140131.zip
 
 
 
今回の透明グラデーションの左と左右にも高速化のために
LockBitsを使ったんだけど理解していないせいか出来がいまいち
透明度は0から255の範囲なんだけど計算途中でそれを超えることがあって
255より大きければ255にするっている処理をしているから
正確ではなくなっているし無駄な処理もしている
 
左の透明グラデーションの場合の計算
If CByte(pixels(pos) * (1 - tStrength)) + (pixels(pos) * tStrength * x / (bmp.Width * gRange)) _
   > CByte(255) Then
   pixels(pos) = CByte(255)
Else
   pixels(pos) = CByte(pixels(pos) * (1 - tStrength)) + (pixels(pos) * tStrength * x / (bmp.Width * gRange))
End If
tStrengthが強さで0.1から1.0
gRangeが範囲で0.1から1.0
xが横座標
Pixelsが画像のデータ
posがアドレス
自分でも何をやっているのかよくわかっていない
範囲や強さが最大値なら問題なくて縮めるとエラーが出る
 
わかっているムダが横座標が変わらないなら縦座標が変わっても透明度は変化しないから
横座標がかわるまでは1回しか計算しなくてもいいのに毎回計算していること
雰囲気的にわかるのが計算自体に無駄がある、間違っている
割り算がイマイチ理解できていないんだよなあ