Browse Source

* Make compression struct accessible to descendants. Fixes issue #40327

Michaël Van Canneyt 2 years ago
parent
commit
ab3916b0f8
2 changed files with 16 additions and 12 deletions
  1. 1 0
      packages/fcl-image/src/fpreadjpeg.pas
  2. 15 12
      packages/fcl-image/src/fpwritejpeg.pas

+ 1 - 0
packages/fcl-image/src/fpreadjpeg.pas

@@ -65,6 +65,7 @@ type
     procedure InternalRead(Str: TStream; Img: TFPCustomImage); override;
     function  InternalCheck(Str: TStream): boolean; override;
     class function InternalSize(Str:TStream): TPoint; override;
+    property CompressInfo : jpeg_decompress_struct Read Finfo Write FInfo;
   public
     constructor Create; override;
     destructor Destroy; override;

+ 15 - 12
packages/fcl-image/src/fpwritejpeg.pas

@@ -38,7 +38,9 @@ type
     FQuality: TFPJPEGCompressionQuality;
     FProgressMgr: TFPJPEGProgressManager;
   protected
+    procedure InitWriting; virtual;
     procedure InternalWrite(Str: TStream; Img: TFPCustomImage); override;
+    property CompressInfo : jpeg_compress_struct Read FInfo Write FInfo;
   public
     constructor Create; override;
     destructor Destroy; override;
@@ -95,23 +97,24 @@ end;
 
 { TFPWriterJPEG }
 
+
+procedure TFPWriterJPEG.InitWriting;
+begin
+  FError := jpeg_std_error;
+  FInfo := Default(jpeg_compress_struct);
+  jpeg_create_compress(@FInfo);
+  FInfo.err := jerror.jpeg_std_error(FError);
+  FInfo.progress := @FProgressMgr.pub;
+  FProgressMgr.pub.progress_monitor := @ProgressCallback;
+  FProgressMgr.instance := Self;
+
+end;
+
 procedure TFPWriterJPEG.InternalWrite(Str: TStream; Img: TFPCustomImage);
 var
   MemStream: TMemoryStream;
   Continue: Boolean;
 
-  procedure InitWriting;
-  begin
-    FillChar(FInfo, sizeof(FInfo), 0);
-    FError := jpeg_std_error;
-    FInfo.err := jerror.jpeg_std_error(FError);
-
-    jpeg_create_compress(@FInfo);
-    FProgressMgr.pub.progress_monitor := @ProgressCallback;
-    FProgressMgr.instance := Self;
-    FInfo.progress := @FProgressMgr.pub;
-  end;
-
   procedure SetDestination;
   begin
     if Str is TMemoryStream then