基本的には、例えば
const
MAGIC_WORD = $535B;
type
TMyFileTypeHeader = packed record
MagicWord: word; // = MAGIC_WORD
Size: cardinal;
Version: cardinal;
Width: cardinal;
Height: cardinal;
ColorDepth: cardinal;
Title: array[0..31] of char;
end;
procedure ReadFile(const FileName: string);
var
f: file;
amt: integer;
FileHeader: TMyFileTypeHeader;
begin
FileMode := fmOpenRead;
AssignFile(f, FileName);
try
Reset(f, 1);
BlockRead(f, FileHeader, sizeof(TMyFileTypeHeader), amt);
if FileHeader.MagicWord <> MAGIC_WORD then
raise Exception.Create(Format('File "%s" is not a valid XXX file.', [FileName]));
// Read, parse, and do something
finally
CloseFile(f);
end;
end;
を行い、ビットマップファイルはBITMAPINFOHEADER
によって(バージョン3に)続いBITMAPFILEHEADER
構造、で始まります。非圧縮のRGB画素データが続くパレット項目の任意の配列、(最も単純な場合において、ここで24ビットのフォーマットで)、続い:BBGGRRBBGGRRBBGGRR ...
はJPGを読み取り、一方、非常ありますJPGデータは圧縮されているため、多くの高度な数学が必要です(私は実際にJPG仕様に掘り下げたことはありません)。少なくとも、これは現代の多くのイメージファイルフォーマットに当てはまります。一方、BMPは自明ですが、 "最悪"のことは、画像がRLE圧縮されていることです。
ファイルを解析する「詳細」は、ファイル形式によってまったく異なります。ファイル形式の指定は、データがバイナリ形式でどのように格納されるかを開発者に指示します(上記の2つのビットマップ構造はWindowsビットマップ仕様の一部です)。これは契約のようなもので、そのようなファイルのすべてのエンコーダ/デコーダによって署名されています(文字通りではありません)。 EBMLの場合、仕様はhereと表示されます。
非常に曖昧な質問です。しかし、私の答えは助けになるかもしれません。 –
EBML形式でもっと深く掘り下げる前に、私は基礎を作りたいと思っていました。 Sense EBMLは、他のほとんどのファイルタイプとは基本的にxmlの意味が異なります。 DelphiのGifやPngのサポートのように、他のコンポーネントを参考にしてみました。 – Logman
ここでは、ブロックを読み込む方法を示していますが、個々のバイトを読み込む方法はありません。私はかなり新しいですが、EBML形式では可変長整数を使用しています。 – Logman