午後わてんのブログ

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

透明や半透明の画像もコピペできるようになったPixtack紫陽花

 
開いる画像や開いていた画像に上書き保存しようとするとエラーになるのを修正
画像がない状態で画像を消去しようとするとエラーになるのを修正
画像がない状態で透過色を元に戻すのボタンを押すとエラーになるのを修正
半透明の画像にカラーマトリックスを使った時は下の画像が残ってしまっていたのを修正
透明や半透明の状態を維持してコピペできるようにした

f:id:gogowaten:20191014105038p:plain

赤色の画像1を半透明にして
ここでカラーマトリックスを使うセピア色のボタンを押す
 

f:id:gogowaten:20191014105049p:plain

こうなって
このセピア色になった画像を移動させると以前は
下にある画像2がそのまま写り込んだ状態になってしまったけど
 

f:id:gogowaten:20191014105103p:plain

それがなくなって自然な状態にできるようになった
 
次はコピペの問題を修正

f:id:gogowaten:20191014105115p:plain

画像2を半透明にして
 

f:id:gogowaten:20191014105127p:plain

半透明になった画像2をコピーボタンを押してから
クリップボードから追加ボタンを押して貼り付けると
 

f:id:gogowaten:20191014105139p:plain

こうなっていたけど
 

f:id:gogowaten:20191014105150p:plain

コピペのボタンを押せばこうなるようにした
色も変化していないし半透明になっているし下の画像の映りもなくなっている
 
 
開いる画像や開いていた画像に上書き保存で落ちるのを修正
ってのが難しかった
今までは開いている画像ファイルはロックされた状態だったので
名前の変更や移動、削除とかができなかった
それはそれでいいやと思っていたけど上書き保存ができないのは
ちょっと不便かなと思い直して
ファイルを開くのにファイルストリームってのを使うようにした
これでロックされなくなったので色々できるようになったんだけど
今度はカラーマトリックスを使った色変換を実行すると
「メモリが不足しています」とエラーが出るようになった
もちろんメモリは足りているからわからなくて
 
ImageAttributeを使ったDrawImageでメモリが不足しています: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-38/23266.html
 
これで解決できた
カラーマトリックスを使うときは32bitカラーが必要なのに
System.Drawing.ImageにPictureBox.Imageを読み込むと24bitカラーになって
これが原因だった
じゃあなんで今まではエラーにならなかったのか
たぶん今まではBitmapを使っていたからすべての画像が32bitで読み込まれていた
今回のファイルストリームってのは元の画像のカラーで読み込むから?
今見てみたら読み込んだ直後は8bitでもクリックしたり移動すると32bitになる
ワケガワカラナイヨ
でも動いているからいいや
 
参照したところ
表示中の画像ファイルが削除できない問題の解決法: .NET Tips: C#, VB.NET
http://dobon.net/vb/dotnet/graphics/drawpicture2.html
ダウンロード
ファイル名 Pixtack_20140115.zip