Browse Source

* fixed Bug in Lazarus PNG/JPEG export: swapped red and blue values when saving RGB* Formats

master
Bergmann89 12 years ago
parent
commit
d5c49ccbaf
1 changed files with 8 additions and 4 deletions
  1. +8
    -4
      glBitmap.pas

+ 8
- 4
glBitmap.pas View File

@@ -4920,7 +4920,7 @@ begin


rid.Width := Width; rid.Width := Width;
rid.Height := Height; rid.Height := Height;
rid.Depth := CountSetBits(FormatDesc.Range.r or FormatDesc.Range.g or FormatDesc.Range.b or FormatDesc.Range.a);
rid.Depth := CountSetBits(FormatDesc.RedMask or FormatDesc.GreenMask or FormatDesc.BlueMask or FormatDesc.AlphaMask);
rid.BitOrder := riboBitsInOrder; rid.BitOrder := riboBitsInOrder;
rid.ByteOrder := riboLSBFirst; rid.ByteOrder := riboLSBFirst;
rid.LineOrder := riloTopToBottom; rid.LineOrder := riloTopToBottom;
@@ -5977,13 +5977,15 @@ procedure TglBitmap.SavePNG(const aStream: TStream);
var var
png: TPortableNetworkGraphic; png: TPortableNetworkGraphic;
intf: TLazIntfImage; intf: TLazIntfImage;
raw: TRawImage;
begin begin
png := TPortableNetworkGraphic.Create; png := TPortableNetworkGraphic.Create;
intf := TLazIntfImage.Create(0, 0); intf := TLazIntfImage.Create(0, 0);
try try
if not AssignToLazIntfImage(intf) then if not AssignToLazIntfImage(intf) then
raise EglBitmap.Create('unable to create LazIntfImage from glBitmap'); raise EglBitmap.Create('unable to create LazIntfImage from glBitmap');
png.LoadFromIntfImage(intf);
intf.GetRawImage(raw);
png.LoadFromRawImage(raw, false);
png.SaveToStream(aStream); png.SaveToStream(aStream);
finally finally
png.Free; png.Free;
@@ -6513,13 +6515,15 @@ procedure TglBitmap.SaveJPEG(const aStream: TStream);
var var
jpeg: TJPEGImage; jpeg: TJPEGImage;
intf: TLazIntfImage; intf: TLazIntfImage;
raw: TRawImage;
begin begin
jpeg := TJPEGImage.Create; jpeg := TJPEGImage.Create;
intf := TLazIntfImage.Create(0, 0); intf := TLazIntfImage.Create(0, 0);
try try
if not AssignToLazIntfImage(intf) then if not AssignToLazIntfImage(intf) then
raise EglBitmap.Create('unable to create LazIntfImage from glBitmap'); raise EglBitmap.Create('unable to create LazIntfImage from glBitmap');
jpeg.LoadFromIntfImage(intf);
intf.GetRawImage(raw);
jpeg.LoadFromRawImage(raw, false);
jpeg.SaveToStream(aStream); jpeg.SaveToStream(aStream);
finally finally
intf.Free; intf.Free;
@@ -8559,4 +8563,4 @@ finalization
FreeAndNil(InitOpenGLCS); FreeAndNil(InitOpenGLCS);
{$ENDIF} {$ENDIF}


end.
end.

Loading…
Cancel
Save