午後わてんのブログ

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

複数の画像ファイルを一度にトリミングして保存するアプリをつくった8

不具合の修正
リストに追加した元画像を削除したり移動させたりした後に
保存実行をするとファイルが見つからなくてエラーになっていたのを修正
保存実行中に画像が見つからないときにエラーになっていたのを修正
大きさ一覧から削除する時に空白を指定していたらエラーになっていたのを修正
ファイル名に使えない文字が指定された場合メッセージ表示するようにした
クリップボードからの画像を保存する時エラーになっていたのを修正
表示画像の大きさの表示が更新されていなかったのを修正
切り取り範囲が最小値の時縮小表示をするとエラーになっていたのを修正
拡大縮小の時の無駄な透過処理の消去
大きさ一覧から選んだ時に拡大倍率に対応するようにした
 
 
仕様変更
クリップボードからの画像のファイル名が重複する場合に後ろに連番をつけるようにした
クリップボードからの画像の連番をリセットできるようにした
拡大倍率x8を廃止した
設定画面の閉じる、最小化、最大化のボタンを使えるようにした
画像追加時は追加した画像を表示するようにした
複数一度に追加した時は一番最後に追加されたものを表示
保存場所に同じファイル名があった場合はファイル名の後ろに連番をつけるようにした
 
機能追加
保存実行のショートカットキー(Ctrl+s)を設定画面上からでも使えるようにした
保存時に進行状況を表示するようにした、保存実行ボタンの下
画像追加時の待ち時間はカーソルの形を変えるようにした
64bit版も作ってみた
 
メモリ関係
拡大倍率を下げた時にメモリの開放をするようにした
表示画像を切り替えた時に使用メモリ量が1000MB以上ならメモリの開放するようにした
メモリ使用量表示をするようにした
 

f:id:gogowaten:20191015093713p:plain

2018x1536の8倍は
16384x12288
この大きさのBitmapを作成しようとしたところでエラーになっていた
回避の仕方がわからないのでx8は廃止にしたけど
HDの何倍もあるような大きさの画像なら等倍表示でもエラーになると思う
メモリ使用量が増える状況は拡大表示以外でもたくさんあって
縮小表示、切り取り範囲の変更、移動、
切り取り範囲の上でマウスを動かす、表示画像の切り替え、など
この中で
縮小表示の時は直前の拡大表示に使っていたメモリは確実に無駄
画像の切り替えも直前の表示に使っていたメモリは無駄ァ
と考えてメモリの開放をググったらありました
System.GC.Collect()
 
メモリの状況を表示するようにしてみたイメージ 2
緑のバーがPC全体でのメモリ使用率
その下の数字がPixtrimが使っているメモリで単位はMB
 
 

f:id:gogowaten:20191015094601p:plain

クリップボードからの画像取り込みでファイル名が重複した時に
連番をつけるようにした
クリップボードからの画像のファイル名の指定で
ファイル名に使えない文字があればメッセージ表示して
その文字を選択状態にする
この辺りを作るのに時間がかかった
 
 
64ビット版

f:id:gogowaten:20191015094630p:plain

空きメモリはあるのにメモリ不足のエラーが出るから
64ビットなら回避できるのかなあ
64ビットのアプリってどうやって作るんだろう
ググったらありました
難しかったり面倒だったりするのかと思っていたけど
ほんの少し設定を変えるだけなので作ってみた
効果の程はf:id:gogowaten:20191015094703p:plain
ってことで効果はあるみたい
あまりにも簡単だから半信半疑
 
参照した所
ファイル名 - Wikipedia
 
アプリケーションが64ビットで動いているか調べる、OSが64ビットか調べる: .NET Tips: C#, VB.NET
ProgressBarが徐々に伸びるアニメーションを無効にする: .NET Tips: C#, VB.NET
 
VB2010Expressで64ビットのソフトを開発する方法 - YKMTのソフト、ゲーム作成記
 
オブジェクトの解放について
 
KeyPressなどのキーイベントをすべてフォームが受け取るようにする: .NET Tips: C#, VB.NET
 
ファイル名に使用できない文字列が含まれていないか調べる: .NET Tips: C#, VB.NET
 
 
ダウンロード
32bitファイル名 Pixtrim_20140630.zip
64bitファイル名 Pixtrim_x64_20140630.zip