Extraktion av laddade bilder
Extraktion av laddade bilder låter applikationer räkna upp bild-XObjects efter att LoadFromFile eller LoadFromStream har öppnat en befintlig PDF, granska deras metadata och avkoda bilder som stöds till TBitmap instanser
Huvud-API:er
GetLoadedImageCountreturnerar antalet uppräkneliga bildobjekt i det laddade dokumentetGetLoadedImageInfofyllerTHPDFLoadedImageInfomed objektnummer, sidindex, storlek, bitdjup, färgrymd, filterlista och metadata för avkodbarhet utan att avkoda pixlarExtractLoadedImageavkodar den valda bilden till en nyTBitmap; anroparen äger den returnerade bitmappenGetLoadedImageCountPerPagebegränsar uppräkningen till en laddad sida
Källor som stöds
- Datafilter omfattar
FlateDecode,LZWDecode,ASCIIHexDecode,ASCII85Decode,RunLengthDecodesamt filterkedjor med flera filter som slutar i ett bildfilter - Bildfilter omfattar
DCTDecode,JPXDecode,JBIG2DecodeochCCITTFaxDecode - Rastervägar omfattar DeviceRGB, DeviceGray, Indexed, DeviceCMYK samt gråskale- eller indexbilder med lågt bitdjup
Avkodningsparametrar och säkerhet
DecodeParmsoch dess förkortadeDP-nyckel resolvättas oavsett om värdet är en ordlista eller den sista ordlistan i en array med filterparametrarPredictor,Colors,BitsPerComponentochColumnstillämpas efter Flate- eller LZW-dekomprimering- LZW
EarlyChange=0ochEarlyChange=1respekteras båda - TIFF Predictor 2 stödjer packade 1-, 2- och 4-bitars sampel samt 8- och 16-bitars komponenter
- PNG-prediktorer kräver en giltig filtertagg för varje hel rad
- Rastermått och förväntade byteantal kontrolleras för överflöde före allokering eller avkodning
- Felaktiga komprimerade data rapporteras som avkodningsfel och behandlas aldrig som okomprimerade pixlar
Exempel
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;