Loaded Image Extraction
La extracción de imágenes cargadas permite a las aplicaciones enumerar los XObjects de imagen después de que LoadFromFile o LoadFromStream abra un PDF existente, inspeccionar sus metadatos y decodificar las imágenes soportadas en instancias TBitmap
Main APIs
GetLoadedImageCountdevuelve el número de objetos de imagen enumerables del documento cargadoGetLoadedImageInforellenaTHPDFLoadedImageInfocon número de objeto, índice de página, tamaño, profundidad de bits, espacio de color, lista de filtros y metadatos de decodificabilidad sin decodificar píxelesExtractLoadedImagedecodifica la imagen seleccionada a un nuevoTBitmap; el llamador es propietario del bitmap devueltoGetLoadedImageCountPerPageacota la enumeración a una página cargada
Supported sources
- Los filtros de datos incluyen
FlateDecode,LZWDecode,ASCIIHexDecode,ASCII85Decode,RunLengthDecodey cadenas multifiltro que terminan en un filtro de imagen - Los filtros de imagen incluyen
DCTDecode,JPXDecode,JBIG2DecodeyCCITTFaxDecode - Los trazados ráster incluyen DeviceRGB, DeviceGray, Indexed, DeviceCMYK e imágenes de escala de grises o indexadas de poca profundidad de bits
Decode parameters and safety
- La clave
DecodeParmsy su abreviaturaDPse resuelve tanto si el valor es un diccionario como si es el diccionario final de un array de parámetros de filtro Predictor,Colors,BitsPerComponentyColumnsse aplican tras la descompresión Flate o LZW- Se respetan tanto LZW
EarlyChange=0comoEarlyChange=1 - El Predictor 2 de TIFF soporta muestras empaquetadas de 1, 2 y 4 bits además de componentes de 8 y 16 bits
- Los predictores PNG exigen una etiqueta de filtro válida para cada fila completa
- Las dimensiones ráster y los recuentos de bytes esperados se comprueban contra desbordamientos antes de asignar o decodificar
- Los datos comprimidos mal formados se informan como fallo de decodificación y nunca se tratan como píxeles sin comprimir
Example
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;