Extraktion geladener Bilder
Die Extraktion geladener Bilder ermöglicht Anwendungen, Bild-XObjects aufzuzählen, nachdem LoadFromFile oder LoadFromStream ein vorhandenes PDF geöffnet hat, ihre Metadaten zu prüfen und unterstützte Bilder in TBitmap-Instanzen zu dekodieren
Wichtigste APIs
GetLoadedImageCountliefert die Anzahl der aufzählbaren Bildobjekte im geladenen DokumentGetLoadedImageInfofülltTHPDFLoadedImageInfomit Objektnummer, Seitenindex, Größe, Bittiefe, Farbraum, Filterliste und Metadaten zur Dekodierbarkeit, ohne Pixel zu dekodierenExtractLoadedImagedekodiert das ausgewählte Bild in eine neueTBitmap; der Aufrufer besitzt die zurückgegebene BitmapGetLoadedImageCountPerPagebeschränkt die Aufzählung auf eine geladene Seite
Unterstützte Quellen
- Zu den Datenfiltern gehören
FlateDecode,LZWDecode,ASCIIHexDecode,ASCII85Decode,RunLengthDecodeund Mehrfilter-Ketten, die in einem Bildfilter enden - Zu den Bildfiltern gehören
DCTDecode,JPXDecode,JBIG2DecodeundCCITTFaxDecode - Zu den Raster-Pfaden gehören DeviceRGB, DeviceGray, Indexed, DeviceCMYK sowie Graustufen- oder indizierte Bilder mit geringer Bittiefe
Dekodierparameter und Sicherheit
DecodeParmsund sein abgekürzter SchlüsselDPwerden aufgelöst, egal ob der Wert ein Wörterbuch oder das letzte Wörterbuch in einem Filterparameter-Array istPredictor,Colors,BitsPerComponentundColumnswerden nach der Flate- oder LZW-Dekomprimierung angewendet- Sowohl LZW
EarlyChange=0als auchEarlyChange=1werden unterstützt - TIFF Predictor 2 unterstützt gepackte 1-, 2- und 4-Bit-Samples sowie 8- und 16-Bit-Komponenten
- PNG-Prädiktoren benötigen ein gültiges Filter-Tag für jede vollständige Zeile
- Raster-Abmessungen und erwartete Bytezahlen werden vor Allokation oder Dekodierung auf Überlauf geprüft
- Fehlerhafte komprimierte Daten werden als Dekodierfehler gemeldet und niemals als unkomprimierte Pixel behandelt
Beispiel
var
Doc: THotPDF;
Info: THPDFLoadedImageInfo;
Bmp: TBitmap;
I: Integer;
begin
Doc := THotPDF.Create(nil);
try
Doc.LoadFromFile('input.pdf');
for I := 0 to Doc.GetLoadedImageCount - 1 do
if Doc.GetLoadedImageInfo(I, Info) and Info.Decodable then
begin
Bmp := Doc.ExtractLoadedImage(I);
try
if Assigned(Bmp) then
Bmp.SaveToFile(Format('image-%d.bmp', [I]));
finally
Bmp.Free;
end;
end;
finally
Doc.Free;
end;
end;