Loaded Image Extraction
Loaded image extraction lets applications enumerate image XObjects after LoadFromFile or LoadFromStream åbner en eksisterende PDF, inspicerer deres metadata og afkoder understøttede billeder til TBitmap instances
Main APIs
GetLoadedImageCountreturnerer antallet af objekter i det indlæste dokument, der kan opregnes som billederGetLoadedImageInfofillsTHPDFLoadedImageInfomed objektnummer, sideindeks, størrelse, bitdybde, farverum, filterliste og afkodningsbarheds-metadata uden at afkode pixelsExtractLoadedImageafkoder det valgte billede til en nyTBitmap; kalderen ejer den returnerede bitmapGetLoadedImageCountPerPagescopes enumeration to one loaded page
Supported sources
- Data filters include
FlateDecode,LZWDecode,ASCIIHexDecode,ASCII85Decode,RunLengthDecode, og multi-filter-kæder, der ender i et billedfilter - Image filters include
DCTDecode,JPXDecode,JBIG2Decode, andCCITTFaxDecode - Raster-stier omfatter DeviceRGB, DeviceGray, Indexed, DeviceCMYK samt lavbitdybde gråtone- eller indekserede billeder
Decode parameters and safety
DecodeParmsand its abbreviatedDP-nøgle opløses, uanset om værdien er en ordbog eller den sidste ordbog i et filterparameter-arrayPredictor,Colors,BitsPerComponentogColumnsanvendes efter Flate- eller LZW-dekomprimering- LZW
EarlyChange=0andEarlyChange=1are both honoured - TIFF Predictor 2 understøtter pakkede 1-, 2- og 4-bit samples samt 8- og 16-bit komponenter
- PNG-prædiktorer kræver et gyldigt filtertag for hver komplet række
- Rasterdimensioner og forventede bytetal kontrolleres for overflow, før der allokeres eller afkodes
- Fejlbehæftede komprimerede data rapporteres som en afkodningsfejl og behandles aldrig som ukomprimerede pixels
Eksempel
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;