午後わてんのブログ

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

複数の画像ファイルを一度にトリミングして保存するアプリPixtrimをつくった22 メモリの開放し過ぎてた

前回の変更で別の不具合が出ていたのを直した

f:id:gogowaten:20191023150630p:plain

クリップボードから取り込んだ画像を保存した後に
リストにある画像を選択するとエラーになっていた
消しちゃいけないものまでDisposeでメモリから削除していて
これを直したからメモリ使用量は増えるはず
なんだけどちょっとテストした限りではあんまり増えた感じしない
 
クリップボードから取り込んだ画像は名前を付けてImgCollectionっていうCollectionにまとめておいて、画像保存するときにそこから1枚づつ取り出している
この取り出し方が良くなかった
Dim obj = ImgCollection(myFormSetting.ListBox1.Items(i))
Dim img As Image = obj
こう(意味不明な処理)だったのを
 
Dim img As New Bitmap(DirectCast(ImgCollection(myFormSetting.ListBox1.Items(i)), Image))
こうした、あんまりわかっていないけどこれでエラーが出なくなって選択した画像が表示されるようになった
 
保存処理が終わったらimgをDispose()している
リストから選択された画像表示するときはCollectionから取り出している
前回はCollectionの中の画像まで消えていたから、その消えた画像を表示しようとしてエラーになっていた
今回はNewでBitmapを作成して、そこにCollectionの画像をコピペしたからDisposeで消えるのはコピペした画像だけどコピペ元のCollectionの中の画像は消えないってことかなあ
 
でも直ったと思う()
 
ダウンロード
ヤフーボックス
 
OneDrive
ファイル名
Pixtrim1.8.27.0.zip(32ビットWindows用)