lazarus/lcl/include/jpegimage.inc

121 lines
3.0 KiB
PHP

{%MainUnit ../graphics.pp}
{******************************************************************************
TJPegImage
******************************************************************************
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
{ TJPEGImage }
constructor TJPEGImage.Create;
begin
inherited Create;
FPerformance := jpBestQuality;
FProgressiveEncoding := False;
FGrayScale := False;
FQuality := 75;
end;
procedure TJPEGImage.Compress;
var
TempStream: TMemoryStream;
begin
TempStream := TMemoryStream.Create;
try
FreeSaveStream;
SaveToStream(TempStream);
TempStream.Position := 0;
LoadFromStream(TempStream);
finally
TempStream.Free;
end;
end;
class function TJPEGImage.IsStreamFormatSupported(Stream: TStream): Boolean;
var
Pos: Int64;
SOI: Word;
begin
Pos := Stream.Position;
try
Stream.Read(SOI, SizeOf(SOI));
Result := SOI = NtoLE($D8FF);
finally
Stream.Position := Pos;
end;
end;
procedure TJPEGImage.FinalizeReader(AReader: TFPCustomImageReader);
begin
FProgressiveEncoding := TFPReaderJPEG(AReader).ProgressiveEncoding;
FGrayScale := TFPReaderJPEG(AReader).GrayScale;
inherited;
end;
class function TJPEGImage.GetFileExtensions: string;
begin
Result := 'jpeg;jpg;jpe;jfif';
end;
class function TJPEGImage.GetReaderClass: TFPCustomImageReaderClass;
begin
Result := TFPReaderJPEG;
end;
class function TJPEGImage.GetSharedImageClass: TSharedRasterImageClass;
begin
Result := TSharedJPEGImage;
end;
class function TJPEGImage.GetWriterClass: TFPCustomImageWriterClass;
begin
Result := TFPWriterJPEG;
end;
procedure TJPEGImage.InitializeReader(AImage: TLazIntfImage; AReader: TFPCustomImageReader);
begin
inherited;
TFPReaderJPEG(AReader).MinHeight := MinHeight;
TFPReaderJPEG(AReader).MinWidth := MinWidth;
TFPReaderJPEG(AReader).Performance := Performance;
TFPReaderJPEG(AReader).Scale := Scale;
TFPReaderJPEG(AReader).Smoothing := Smoothing;
end;
procedure TJPEGImage.InitializeWriter(AImage: TLazIntfImage; AWriter: TFPCustomImageWriter);
begin
inherited;
if not(AWriter is TFPWriterJPEG) then Exit;
TFPWriterJPEG(AWriter).ProgressiveEncoding := ProgressiveEncoding;
TFPWriterJPEG(AWriter).CompressionQuality := CompressionQuality;
TFPWriterJPEG(AWriter).GrayScale := GrayScale;
end;
procedure TJPEGImage.SetCompressionQuality(AValue: TJPEGQualityRange);
begin
if FQuality = AValue then Exit;
FQuality := AValue;
FreeSaveStream;
end;
procedure TJPEGImage.SetGrayScale(AValue: Boolean);
begin
if FGrayScale = AValue then Exit;
FGrayScale := AValue;
FreeSaveStream;
end;
procedure TJPEGImage.SetProgressiveEncoding(AValue: boolean);
begin
if FProgressiveEncoding = AValue then Exit;
FProgressiveEncoding := AValue;
FreeSaveStream;
end;