PowerPDF: use fcl-image for image processing.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7602 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
jesusr
2020-08-14 13:39:02 +00:00
parent 8dd89d1af9
commit 123e934a4f
6 changed files with 341 additions and 137 deletions

View File

@@ -27,10 +27,12 @@ interface
uses
SysUtils, Classes, Graphics, PdfTypes, PdfDoc, PdfImages
{$IFDEF LAZ_POWERPDF}
,FPImage, FPReadJPEG, PdfImageLazTools
{$ELSE}
,JPEG
{$ENDIF}
;
type
{ TPdfJpegImage }
TPdfJpegImage = class(TPdfImageCreator)
@@ -41,7 +43,48 @@ type
implementation
// CreateImage
{$IFDEF LAZ_POWERPDF}
function TPdfJpegImage.CreateImage(AImage: TGraphic; ObjectMgr: TPdfObjectMgr=nil): TPdfImage;
var
fpImg: TFPCustomImage;
begin
// check whether specified graphic is valid image.
if not (AImage is TJpegImage) then
raise EPdfInvalidValue.Create('only jpeg image is allowed.');
result := TPdfImage.CreateStream(nil);
try
ConvertGraphicToFPImage(AImage, fpImg);
TJpegImage(AImage).SaveToStream(result.Stream);
with result.Attributes do
begin
AddItem('Type', TPdfName.CreateName('XObject'));
AddItem('Subtype', TPdfName.CreateName('Image'));
if TJPegImage(AImage).GrayScale then
AddItem('ColorSpace', TPdfName.CreateName('DeviceGray'))
else
AddItem('ColorSpace', TPdfName.CreateName('DeviceRGB'));
AddItem('Width', TPdfNumber.CreateNumber(fpImg.Width));
AddItem('Height', TPdfNumber.CreateNumber(fpImg.Height));
AddItem('BitsPerComponent', TPdfNumber.CreateNumber(8));
PdfArrayByName('Filter').AddItem(TPdfName.CreateName('DCTDecode'));
end;
fpImg.Free;
except
result.Free;
raise;
end;
end;
{$ELSE}
function TPdfJpegImage.CreateImage(AImage: TGraphic; ObjectMgr: TPdfObjectMgr=nil): TPdfImage;
begin
// check whether specified graphic is valid image.
if not (AImage is TJpegImage) then
@@ -70,6 +113,7 @@ begin
end;
end;
{$ENDIF}
initialization