画像ファイルのサムネイルをタイル状に並べて表示するだけのプログラムです。主にコマンドラインで使うことを想定しています。Windows用です。対応している画像形式はGDI+が対応している形式です。
https://github.com/misohena/piclist/raw/master/release/piclist.zip
piclist [-w ウィンドウ名] [-nc] [ファイル名 | ワイルドカード付きファイル名 | ディレクトリ | -br]...
次の例は、201205で始まるjpgファイルのリストを表示します。
piclist 201205*.jpg
複数指定すると、指定した順番で表示します。
piclist 201208*.jpg 201205*.jpg last.png
この場合、201208で始まるファイルが先に並び、その後に201205で始まるファイルが並び、最後にlast.pngが並びます。 ワイルドカードにマッチするファイルが複数ある場合は、ファイル名順にソートされます。
ディレクトリを指定した場合、そのディレクトリの直下にある画像ファイル(拡張子が.jpg、.jpeg、.png、.bmpであるファイル)をリストアップして表示します。
リストを表示するウィンドウにはウィンドウ名と呼ばれる名前を設定することが出来ます。
次の例は、bgという名前のウィンドウを作成し、背景ディレクトリの中にあるjpgファイルを全て表示します。
piclist -w bg 背景\*.jpg
同じ名前のウィンドウがすでに開いていれば、新にウィンドウを作らず、すでに開いているウィンドウの内容を更新します。
上の例の後に次のようにすると、同じウィンドウに東京で始まる背景だけが表示されます。
piclist -w bg 背景\東京*.jpg
もし、すでに表示されているファイルはそのまま変えずに、新しいファイルを末尾に追加したければ”-nc”オプションを指定します。
例えば上の例の後に次のようにすると、東京で始まる画像の後に岡山で始まる画像が並びます。
piclist -w bg 背景\岡山.jpg -nc
ウィンドウの位置・サイズ・レイアウト設定はウィンドウ名毎にレジストリに記録され、次回同じ名前でウィンドウを開いたときに反映されます。
“-br”を指定すると改行することが出来ます。次の例は、A班で始まるjpgファイルを並べた後に、改行を行い、その後にB班で始まるjpgファイルを並べます。
piclist A班*.jpg -br B班*.jpg
ウィンドウ内で右クリックするとメニューがポップアップします。このメニューから次のことが行えます。
- ウィンドウの最前面固定化/解除
- レイアウト調整(画像幅、高さ、名前高さ、行間、桁間の設定)
- ウィンドウの複製(同じ内容のウィンドウを別のウィンドウ名で開く)
- 内容の全消去
ウィンドウにファイルやディレクトリをドロップすることで、リストにそれらを追加できます。
ディレクトリをドロップすると、そのディレクトリの直下にある画像ファイルをリストの最後に加えます。
プログラムのソースコードはGithubで公開しています。
Visual Studio 2010でビルドしています。出来るだけ他のライブラリを使用しないように作りました。GDI+を使用しています。
- ライブラリ的なもの
- String.h
- Stringクラスを定義する。ANSI/UNICODEビルドの差を吸収するため。
- Math.h
- 数学的なクラスや関数を定義する。
- Window.h
- 汎用的なウィンドウクラスを定義する。必要になるたびに機能を追加しつつ、他のプロジェクトでも使い回せる程度に抽象化している。
- Dialog.h
- 汎用的なダイアログクラスを定義する。必要になるたびに機能を追加しつつ、他のプロジェクトでも使い回せる程度に抽象化している。
- ValueInputDialog.h|cpp
- 一つの値(文字列・整数・浮動小数点数)の入力を受け付けるためだけのダイアログ。
- Menu.h
- 汎用的なメニュークラスを定義する。HMENUのラッパー。
- File.h
- ファイル操作に関するクラスや関数を定義する。
- Stream.h
- 文字列や数値をバイト列へ変換したり、その逆を行ったりするためのクラスを定義する。
- piclist固有なもの
- main.cpp
- main関数とアプリケーションクラスを定義する。
- CommandLine.h|cpp
- コマンドライン文字列からウィンドウ名や絵のファイル名リストを取り出す。main.cppからだけでなくAppWindowからも使う(他のプロセスから要求されることがあるので)。
- Album.h
- piclistで表示する対象となるモデルを定義する。絵はAlbumPictureクラスとして、改行はAlbumLineBreakクラスとして表現される。
- Image.h|cpp
- piclistで扱う「画像」についての定義。
- ImageCache.h
- 同じファイルの画像を何度も読み込まなくても良いようにするためのしくみ。今のところAppWindowのみが利用する。
- AppWindow.h|cpp
- アプリケーションウィンドウ。AppWindowはWindowの派生クラス。その唯一のインスタンスはmain.cppで生成・破棄される。
- Layout.h|cpp
- アプリケーションウィンドウ内の表示レイアウト。表示に必要なパラメータを全て保持する。表示内容が変わったりウィンドウサイズが変わったときにAppWindow::updateLayoutを通じて更新される。
サムネイルの大きさを変更できるようにする。セルとセルとの間の空白を変更できるようにする。桁間と行間。- サムネイルとファイル名との間の空白を変更できるようにする。
ファイル名文字の高さを変更できるようにする。- ファイル名文字のフォーマット(拡張子を入れるか等)を変更できるようにする。
ウィンドウを最前面固定に出来るようにする。- サムネイルのクリックで画像を開けるようにする。
- サムネイルのクリックでファイル名(の一部)をコピーできるようにする。
フォルダやファイルをドロップできるようにする。内容を全消去できるようにする。改行できるようにする。またはセクション(グループ?)分けできるようにする。セクションヘッダー文字を入れられるようにする。行の高さを画像によって自動的に計算できるようにする。つまり、サムネイルの高さとして「自動」を設定できるようにする。すでに開いているウィンドウで開くとき、カレントディレクトリが違うため相対パス指定のファイル名が表示されない問題を解消する。レイアウトパラメータをレジストリに保存する。ウィンドウを複製できるようにする。コマンドラインにディレクトリを指定したとき、そのディレクトリの中のpng、jpg、bmpファイルを表示するようにする。これが出来ると「送る」で使いやすくなる。各所でファイル名をフルパス名へ明示的に変換する。- ディレクトリがドロップされたとき、ファイル名順にソートする。
- AlbumItemContainerに対するファイル追加処理をまとめる。Albumクラスを作って、そのメンバにするのが良いと思う。ディレクトリを追加するときの処理はドロップ受付処理とコマンドライン処理とで共通なのでまとめたい。