午後わてんのブログ

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

PixMark栞無月その6、かなりイマイチなできになった

 
PixMark栞無月その5、画像のブックマーク情報の保存 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
2週間前の続き
 
 
2015/12/06
しおりタブの削除をできるようにした
すべてのタブのデータを纏めて1つのファイルにして保存できるようにした
その保存したファイルを開くことができるようにした
そのファイルの拡張子は.pmkにした、
以前のしおりタブ個別の保存ファイルと同じ拡張子だけど互換性無し
しおりタブ個別保存は廃止した
 
2015/12/05
フォルダパネルとしおりパネルの両方のすべてデータを保存できるようにした
 
2015/12/04
フォルダパネルも複数タブにした
フォルダタブの更新をできるようにした(実際のフォルダにある画像ファイルとの同期)
 
2015/12/03
フォルダタブのデータを保存できるようにした
フォルダパネルにドロップした時に同じフォルダが在ればそのフォルダのタブを表示するようにした
 
2015/12/03以前
いろいろ
 
f:id:gogowaten:20191024152027p:plain
見た目はあんまり変わってないね
 
更新ボタン
イメージ 2
元のフォルダに画像を追加や削除しても
自動では更新されないので更新ボタンで更新
イメージ 3
追加された画像が表示されるようにしたけど
処理に時間がかかりすぎる!
4000ファイルあるところに100足して更新すると5分以上かかった
フルパスを使って有無を判定して、ないものだけ登録しているんだけど
これじゃ全部登録し直すのと変わらないなw
 
複数フォルダに対応

f:id:gogowaten:20191024152211p:plain

左のパネルも複数に対応したので同期させた時も

f:id:gogowaten:20191024152221p:plain

左のフォルダタブも切り替わって同じ画像が選択状態になる
 
状態の保存と読込

f:id:gogowaten:20191024152236p:plain

右上にある全部保存のボタンで
 

f:id:gogowaten:20191024152246p:plain

名前を付けて保存
拡張子は以前と同じpmkだけど互換性無し
これからも互換性無しで変わっていくかなあ
って保存開始したら
10分たっても終わらないw
保存対象は4000+2000+300の合計6300くらいの縮小画像や
ファイルのフルパスを保存
 
トマトの様子を見に行って帰ってきたら終わってた
出来上がったファイルのサイズは200MB
イメージ 8
結構大きなサイズになる
縮小画像でも圧縮なしの6000個だからなあ
 
保存したファイルを開いてみる

f:id:gogowaten:20191024152301p:plain

開くときは右上にある全部読込ボタン
 

f:id:gogowaten:20191024152312p:plain

選択して開く
 

f:id:gogowaten:20191024152322p:plain

開くことができた
タブの表示名は再現されないのは仕様
保存する時10分以上かかったから開くときも時間かかるのかと思ったけど
1分もかからなかった
 
その他追加変更
イメージ 12
フォルダと栞のタブの追加と削除をできるようにした
矢印のアイコンは栞に登録した画像の位置の変更用
 
左下の画像をダブルクリックすると
イメージ 13
左下のパネルは縮小画像をウィンドウサイズに合わせて
表示しているのでどうしてもぼやけてしまう
元の大きさで確認したい時があるので
画像をダブルクリックすると別ウィンドウで開くようにした
イメージ 14
元の大きさで表示
このウィンドウを閉じるときは画像をダブルクリック
 
 
ここまで変更するのに10日くらいかかったんだけどかなりイマイチなできになった
テストしているときは7~300くらいの画像ファイルだったから更新や保存に時間がかかっているのに全く気づかなかった、6000ファイルとかだと時間がかかるのがわかったけど方法がおかしいんだろうなあ
TabControlにListViewを置いて、ListViewのItemのSubItemに縮小画像とファイル名、フルパス、フォルダパスとか設定して表示して
保存するときは
 
<Serializable>
Public Structure SioriData
    Property Name As List(Of String)         '1列目、ファイル名
    Property FullPath As List(Of String)     '2列目、フルパス
    Property FolderPath As List(Of String)   '3列目、フォルダパス
    Property IsZip As List(Of Boolean)       'Zipファイルか否か
    Property LargeIcon As List(Of Image)     'アイコン画
End Structure

こんなふうにPropertyを並べたStructureを作っておいて
ListViewItemからそれぞれコピーしてStructureをシリアライズして保存している
時間がかかっているのはコピーしているところかなあ
一個一個for~Nextで回しているんだけど、これかなあ
根本的に間違っている気もする、データベースとかを使えば早くなるのかも
だとしたら直すのムリかも、データベースはさっぱりわからん
でも問題は速さだけだなあ、何を作りたいのかはわかった気がする

全く実用できない状態だけど
ダウンロード先
OneDrive