2016年8月28日日曜日

VB GIMP ファイルから使われているフォントを調べる

やっと、試作品が完成しました。
以前の投稿 PC GIMP ファイルから使われているフォントを調べる で書いた 手順に基づき、
ファイルから、 GIMP を開かずに、 どんなフォントが利用されているか、調べます。
VB の WPF で、 ProgressBar や DragDrop も実装しました。


GIMP 固有のファイル形式 .xcf を対象に、
そのファイルの中に記載されている 利用フォント名称 を取得します。
フォルダ内や複数ファイルが対象の場合、 その全てで使われているフォント名称を列挙します。
フォント名は、WPF 上の名称ではなく、 GIMP 上のものです。
GIMP の最近のバージョンでは、
ひとつのレイヤーに複数のフォントが指定可能になっていますので、
それにも対応しています。
単独ファイルが対象の場合、
取得されるフォント名称は、 下のレイヤーから上のレイヤーに向かって列挙して行きます。
アルファベット順ではありません。
通常、レイヤーは、上へ上へと追加されますから、それを考慮した訳です。
まだ、プログラムとして整っただけで、 その体裁は試作品レベルです。
これから、 アイコンや ContextMenu その他諸々を揃える予定です。

さて、 以下の図は、 GIMP でのテキストレイヤーの様子と 今回のプログラム試作品の様子 です。







さて、幾つかポイントを。


当初、 ProgressBar は予定していませんでした。
数ファイルなら、左程、待たされる事無く、結果が得られるからです。
しかし、フォルダに格納された 数百個のファイルから となると、
中には、フォントを利用していないものの、レイヤー数が異様に多いファイル(アニメーション用) も混ざっています。
何と言っても、画像ファイルですから、元々、テキストファイルに比べてサイズが大きいですし。
ファイルの何処に情報があるかは不明なので、
最初から最後まで舐める必要があり、 時間が掛かってしまいます。
例え、その結果、フォントを利用していない事が判明しても です。
これらが別に(別のフォルダに)仕分けしてあれば良いのですが、 そうも行きません。
指定されたフォルダにどんな魔物が潜んでいるかは不明な訳ですね。
開けてビックリ玉手箱 です。
でも、総当たり的に調べたいケースだってあるでしょう。
止む無く、 ProgressBar の出番と相成りました。  取得時のみの表示としています。  取得後は目立たない様に、 ね。.

ProgressBar を動かすには幾つか留意点があります。
それは、また、別の機会に。  果たして、別の機会があるかどうか ... ?。.
ポイントは、 DoWork で別スレッドを動かし、 それには UI を操作させない! です。
良く見掛ける ProgressBar ですが、 その実装は 慣れていないと 曲者(いや、コツが必要)。
詳しくは、 ヘルプや Internet 検索なさって見て下さい。  実は、Sample Code を示せる程、理解していません。.


Windows Form では DragDrop 実装の経験はありましたが、 WPF では初めてです。
似ていますが、少し、違いが ... 。
DragEnter で書いていたものを DragOver にする必要があります。
それ以外にも、気付いた点があります。
Window でのみ AllowDrop すると、 ListBox 辺りで Mouse Hover した時、 Leave と Over を繰り返すみたい。
だからと言って、特に挙動に変化は見られませんが、無駄な Event を絶えず発信していそう です。.  直さないとかな?。.


試作品を作って動かした感想です。
GIMP を使いだして、ある程度、年数が経ちました。
当然、 その間には、 面白そうなフォントを見付け試した事が何回もあります。
でも、そのフォントが現在利用中の GIMP の中で活きているか? と言うと、必ずしも、そうでもありません。
取捨選択を繰り返した来たその歴史。
仮に、古いファイルを再利用しようとして開いた時に、
今の自分の OS や GIMP に そのフォントが導入済みであるか否かは 分かりません。
そんな時の手助けにもなりそうです。.


尚、 本来、このプログラムは、別途作成中の GIMP Fonts 用の 機能の一部です。
しかし、個別公開も可能な様に、 別 Solution 別 Project で書いています。
もし、リクエスト戴ければ、 公開も考えたいと思いますので、 コメント欄にどうぞ。

その場合には、
フォント名を列挙したテキストの塊(右の ListBox の内容)をクリップボードへ転送させる事を考えています。.



0 件のコメント:

コメントを投稿