Extractie van geladen afbeeldingen
Extractie van geladen afbeeldingen laat toepassingen na het openen van een bestaande PDF met LoadFromFile of LoadFromStream image-XObjects opsommen, hun metadata inspecteren en ondersteunde afbeeldingen decoderen naar TBitmap-instanties
Main APIs
GetLoadedImageCountgeeft het aantal opsombare beeldobjecten in het geladen document terugGetLoadedImageInfovultTHPDFLoadedImageInfomet objectnummer, pagina-index, afmetingen, bitdiepte, kleurruimte, filterlijst en decodeerbaarheid-metadata zonder pixels te decoderenExtractLoadedImagedecodeert de gekozen afbeelding naar een nieuweTBitmap; de aanroeper is eigenaar van de teruggegeven bitmapGetLoadedImageCountPerPagebeperkt de opsomming tot één geladen pagina
Supported sources
- Datafilters omvatten
FlateDecode,LZWDecode,ASCIIHexDecode,ASCII85Decode,RunLengthDecodeen multi-filterketens die op een beeldfilter eindigen - Beeldfilters omvatten
DCTDecode,JPXDecode,JBIG2DecodeenCCITTFaxDecode - Rasterpaden omvatten DeviceRGB, DeviceGray, Indexed, DeviceCMYK en grijswaarden- of indexed-afbeeldingen met lage bitdiepte
Decodeerparameters en veiligheid
DecodeParmsen de afgekorte sleutelDPworden opgelost, of de waarde nu een woordenlijst is of de laatste woordenlijst in een filterparameter-arrayPredictor,Colors,BitsPerComponentenColumnsworden toegepast na Flate- of LZW-decompressie- LZW
EarlyChange=0enEarlyChange=1worden beide gerespecteerd - TIFF Predictor 2 ondersteunt gepakte 1-, 2- en 4-bit samples naast 8- en 16-bit componenten
- PNG-predictors vereisen een geldige filtertag voor elke complete rij
- Rasterafmetingen en verwachte byteaantallen worden op overflow gecontroleerd vóór allocatie of decodering
- Misvormde gecomprimeerde data wordt als decodeerfout gemeld en wordt nooit als ongecomprimeerde pixels behandeld
Voorbeeld
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;