property BitmapCount: Integer; // read only
BitmapCount は、現在アクティブなページ上の画像ページオブジェクトの数を返します (PDF 1.7 仕様 8.9 節)。インデクサ Bitmap[Index] と対で使います。インデクサは基盤の画像ストリームを、完全にレンダリングされた Delphi の TBitmap (32 ビット RGBA、Canvas.Draw、クリップボード転送、PNG/BMP 保存にそのまま使用可能) へデコードします
Active が False のとき、PageNumber が無効なとき、ページに画像オブジェクトがないときは、この値は 0 になります。この数は ImageCount と同一であり、2 つのプロパティが異なるのはインデクサの戻り値の型だけです。Image[Index] は TPdfImage レコードを返します。その Data はデコード済みのピクセルバッファを保持し、RawData はまだエンコードされたままの画像ストリームを保持します。一方 Bitmap[Index] はそのバッファを、呼び出し側が所有する管理された VCL TBitmap としてラップします
典型的なループは for I := 0 to Pdf.BitmapCount - 1 do とその後の Pdf.Bitmap[I] です。アクセスのたびに新しい TBitmap が割り当てられピクセルがコピーされるため、タイトなレンダリングループの中で呼び出してはなりません。再利用する場合はビットマップをキャッシュし、使い終わったら各ビットマップを解放して GDI リソースを速やかに手放してください
TBitmap のアルファチャンネルへ自動的に統合されますImageCount / Image[Index] の方が GDI ビットマップ割り当てのオーバーヘッドを避けられます
var I: Integer;
var Bmp: TBitmap;
for I := 0 to Pdf1.BitmapCount - 1 do
begin
Bmp := Pdf1.Bitmap[I];
try
Bmp.SaveToFile(Format('image_%d.bmp', [I]));
finally
Bmp.Free;
end;
end;