PhotoSliderの目標
時々「写真パック/セッション/レポート」がすり抜けるいくつかの写真ブログを読みました。 さらに、友人は写真をギガバイト単位で持ち運びます。 かなり多くの種類の写真が収集されるとすぐに(それぞれ10〜20枚)、選択した0.001%の写真を自分の壁紙に残してそれらを調べます。
カメラは誰にとっても良くなっており、写真の重さはますます増えており、ロードの速度に影響を与えることはできません。 すべてを効果的にレーキする方法に問題がありました。 ほとんどすべての写真は単一のビューの後に削除され、少数のお気に入りがwallpaper'ovのフォルダーに移動されます。
最初はPicasaまたはFSViewerのいずれかを使用しました。 しかし、何らかの理由で、両方とも幸せではありませんでした。
- Picasaは写真を全画面表示したくないため、1つのボタンを押して削除することはできません(確認を求める写真ごとに)。次の写真への切り替えはかなり遅くなります(ラップトップで写真を24 MPまで表示すると非常に不快です)。
- FSViewerの速度もそれほど変わりませんでしたが、除去は改善されましたが、それでも低速でした。 さらに、彼はまだファイル名のUnicodeを理解していません(彼は長い間、開発者にサポートを追加するよう求めてきました)。
少し苦労した後、私は独自のユーティリティを書き始め、それがPhotoSliderになりました。
カットの下で、実装と管理の詳細。
使い方
インストーラーはなく、コンソールから起動されます。 2つのパラメーターのみを理解します。
- as-すべてのモニターで実行
- --movepath [path] -お気に入りの移動先(デフォルトでは_good daddyが作成されます)。
(サブフォルダーを使用して)現在のフォルダーを再帰的にスキャンし、常に全画面に展開します。 画面に複数の写真を表示できる場合(たとえば、2つのパノラマが互いに干渉することなく画面に垂直に収まる場合)、複数の写真が表示されます。
以下の管理(少なくとも私にとっては、不要として設定されていない)。
- エスケープ -出口;
- スペース -現在の状態で何もせずに写真の次の部分を表示します。
- del-すべてを削除します。 注意、リクエストなしで削除され、バスケットを過ぎました!
- m-すべての写真をお気に入りに移動します。
- 上/下矢印 -「行の追加/削除」。 つまり 写真の最大解像度を垂直方向に行数で割ったもの。 面白くない写真がたくさんある場合は、バッチで表示すると便利です。
- 左/右矢印 -同じ、行のみ。
- マウスでクリックすることで、写真の残りの部分とは別に、行/列の数が0より大きい場合、「フルスクリーン」写真を見ることができます。 右ボタンにはボタンを複製するメニューがあります
技術的に実装されている方法
写真は別のストリームにアップロードされます。 画面に表示されるときに時間のスケーリングを無駄にしないために、すべての写真は、同じ(選択された)ストリームの画面解像度に合わせてスケーリングされます(比率は保持されます)。
別のストリームは、次の画面の写真の組み合わせを扱います。 コマンドを受信すると、結合された画面から新しい写真が最初に表示され(ユーザーに表示される遅延を最小限に抑えます)、古い写真がリリース/削除/移動されます。
すべてのメモリがいっぱいにならないように、キューにぶら下がっている写真の数に制限があります(現在、これは抽象的な制限です:すべての写真の合計(幅*高さ* 4)<1024 * 1024 * 1024。もっと面白いことがあります)。
(上記の目的のために)他の視聴者よりもずっと活発に動作しているように感じますが、より高速になると予想されます。 どこかにボトルネックがあるようですが、プロファイラーがないため、まだプロファイリングされていません。
気づいたがキャッチされていない欠陥から:
- 一部の写真はロードを拒否しますが、同じFSViewerは問題なくそれらを開きます。 .NET Frameworkで使用されるWindows関数内のどこかに問題があるようです。
- 特定のファイルを削除できない場合があります。 削除されなかった理由をGoogleで確認できませんでした。
- 行/列の数を変更して頻繁に再生すると、不正確なスケーリングが得られることがあります。
最後の数回のコミットでは、すべての機能をチェックしませんでした。おそらくどこかで何かが出てくるでしょう。
これはすべて.NET 3.5のC#で記述されています。 断片的に書かれていることが多く、急いで、アプリケーションのアーキテクチャは非常に乱雑です。 どういうわけか一緒になって、コードを通常の可読性に戻したいと思います。 ほとんどの場合、同じ理由でコメントはありません(+最初は「アプリケーションを1回または2回使用する」ためにさらに開発する予定はありませんでした)。 Windowsでのみテスト済み。 まだMonoで何も書いていませんが、コンパイルできるかどうかわかりません。 私はubuntuに切り替えることにますます惹かれていますが、将来的にはモノラルでリメイクするでしょう。
GPL3でGoogle Codeにアップロードされたソース。
このユーティリティが私以外の誰かに役立つことを願っています。