カタログファイルの仕様

開発者向け、ViXのカタログファイルの仕様です。
カタログファイル1個が1つのフォルダに対応します。
特に断りのない限り、2バイト以上の数値のバイトオーダーはリトルインディアン、文字列はシフトJISで'\0'で終了、整数は符号なし、画像の幅の単位はドットです。

作成場所

カタログファイルは、通常のファイルシステムで読み込めるフォルダについてのみ作成されます。「マイコンピュータ」のようなシステムフォルダには作成してはいけません。
カタログファイルは、画像ファイルがあるのと同じフォルダ、ホームフォルダのどちらに作成しても構いませんが、読み出すときはそのどちらにあっても読み出せるようにしなくてはいけません。

ファイル名

カタログファイルのファイル名は、通常「_CATALOG.VIX」ですが、ホームフォルダ下のカタログファイルには「0000ffff.VIX」のように、8桁の16進数のファイル名がつけられます。この16進数は、検索速度の都合上可能な限り連番でなくてはなりません。

構成

ViXのカタログファイルは、次のような構成になっています。

ID
ファイルヘッダ
カタログデータ1
カタログデータ2
……
カタログデータn

ID

IDは4バイトで、「0x56 0x69 0x58 0x20」です。

ファイルヘッダ

ファイルヘッダは、次のような構成になっています。

ファイルヘッダ スタートマーカー
フィールド1
フィールド2
……
フィールドn
ファイルヘッダ エンドマーカー

ファイルヘッダ スタートマーカーは2バイト整数で 0xff00 です。
ファイルヘッダ エンドマーカーは2バイト整数で 0xff01 です。

フィールドについては後述します。

カタログデータ

1つの画像について、1つのカタログデータがあります。カタログデータには縮小画像本体の他、さまざまな情報が含まれています。

カタログデータは次のように、ファイルヘッダと似た構成になっています。

カタログデータ スタートマーカー
フィールド1
フィールド2
……
フィールドn
カタログデータ エンドマーカー

カタログデータ スタートマーカーは2バイト整数で 0x0001 です。
カタログデータ エンドマーカーは2バイト整数で 0x0002 です。

フィールドについては後述します。

フィールド

フィールドは任意長の何らかのデータであり、次のような構成です。

マーカー
データ長
データ フィールド

マーカーは2バイトの整数で、データ フィールドの種類を表します。データ長は4バイトの整数で、データ フィールドの長さをバイトで表します。
以下で、フィールドのデータフィールド中にどんなデータが入るかを、マーカーごとに説明します。
(任意)と書いてなければ、そのフィールドは必ずカタログデータ内になくてはなりません。それ以外のものは任意フィールドです。
特に断りのない限り、あるフィールドはカタログデータ1つの中に1個だけです。

マーカー 名称 データフィールドの意味
0x0003 ファイル名 画像の、フォルダ名を除いたファイル名です。画像が書庫ファイル内にあるときは、書庫ファイルの名前です。
0x0004 書庫内ファイル名 画像が書庫ファイルの中にあるときは必須です。画像の書庫の中でのファイル名です。
0x0005 コメント(任意) 任意長の文字列であり、画像についてのコメントです。最大で65536バイトまでです。
0x0006 キーワード(任意) 任意長の文字列であり、画像についてのキーワードです。このフィールドはカタログデータ内に何個現れても構いません。1つのキーワードは最大1024バイトまでです。
0x0007 データタイプ 4バイト整数で、現在は1(画像)で固定です。
0x0008 縮小画像タイプ 4バイト整数で、現在は0(JPEG)で固定です。
0x0009 元の画像情報 3つの4バイト整数が入っており、先頭から画像の横幅、縦幅、ビット深さを表します。
0x000A 縮小画像情報 3つの4バイト整数が入っており、先頭から縮小画像の横幅、縦幅、ビット深さを表します。
0x000B 縮小画像作成日時 縮小画像を作成した日時です。画像ファイルのタイムスタンプと比較して、元画像と縮小画像が異なっているかどうか調べることができるでしょう。
2バイト整数が1つ、1バイト整数が5つ入っており、先頭からそれぞれ年、月、日、時、分、秒を表します。
0x000C カタログデータサイズ 4バイトの整数で、このフィールドが属するカタログデータのサイズをバイト数で表します。
0x000D 縮小画像 縮小画像本体が入ります。格納形式は縮小画像タイプのフィールドに記述されています。
現在格納形式はJPEGのみで、その縮小画像をJPEGで保存したときのファイルイメージがそのまま入ります。
0x000E 更新日時(任意) ファイルの更新日時です。日時の記録形式は縮小画像作成日時と同じです。
0x000F ユーザー定義キー(任意)

ユーザーが任意に定義・記録できるキーです。このフィールドは1つカタログデータ内に何個現れても構いません。
データの中身は、アイテムコード(4バイト)、データ型(2バイト)、データ本体です。
アイテムコードはデータの項目名と対応する数値です。データ項目名はユーザーが自由に名づけることができます。アイテムコードが同じであれば同系列のデータであり、データ型も同じでなくてはなりません。アイテムコードは、0x0000~0xffffまでは予約としますので、任意のアイテムコードをつけるときは0x10000以上にしてください。
データ本体はデータ型によって次の3とおりになります。

  • 3 整数…4バイト符号つき整数
  • 7 日時…7バイトで表す日時。縮小画像作成日時を参照
  • 8 文字列…任意の長さの文字列

この数値はWindowsのVARIANT構造体のvtメンバに入る数値(VT_I4, VT_DATE, VT_BSTRなど)に対応しています。

0xff02 フォルダ このフィールドはファイルヘッダにのみ存在します。
カタログファイルに対応するフォルダ名が入ります。現在、ViXではこれを参照していません。
0xff03 ボリュームラベル このフィールドはファイルヘッダにのみ存在します。
カタログファイルに対応するドライブの、ボリュームラベルが入ります。現在、ViXではこれを参照していません。

テーブルファイル

書き込み不能なフォルダに対するカタログファイルが作成されたときは、フォルダとカタログファイルとの対応が、ホームフォルダにある「catalogTable.xml」というテーブルファイルにXMLの仕様にのっとり記録されます。

catalogFile要素の下にtargetPathとvolumeNameの各要素があり、それぞれカタログファイルを作成したフォルダ、そのフォルダのあるディスクのボリューム名を表します。targetPathに記録されるフォルダ名にはドライブ名も入れますが、対応を調べるときにはドライブ名は無視せねばなりません。(メディアが異なるドライブに入れられた場合に対処するため) 例えば、「E:\Images\Photo」というフォルダの時は「\Images\Photo」の部分のみを比較し、ネットワーク上のドライブで「\\AT_Note\c\Image」というフォルダ名のときは、「\Image」の部分だけを比較することとします。