mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 03:56:12 +02:00
* fixed compatebility with 32bpp bitmaps and alpha channel (issue #13917)
git-svn-id: trunk@20498 -
This commit is contained in:
parent
bcedde9431
commit
9601319387
@ -5211,11 +5211,24 @@ begin
|
|||||||
TheStream.Read(FDibInfo.PixelMasks, 4 * SizeOf(FDibInfo.PixelMasks.R));
|
TheStream.Read(FDibInfo.PixelMasks, 4 * SizeOf(FDibInfo.PixelMasks.R));
|
||||||
GetMaskShiftSize(FDibInfo.PixelMasks.A, FDibInfo.MaskShift.A, FDibInfo.MaskSize.A);
|
GetMaskShiftSize(FDibInfo.PixelMasks.A, FDibInfo.MaskShift.A, FDibInfo.MaskSize.A);
|
||||||
end
|
end
|
||||||
|
else begin
|
||||||
|
// officially no alpha support, but that breaks older LCL compatebility
|
||||||
|
// so add it
|
||||||
|
if Info.BitCount = 32
|
||||||
|
then begin
|
||||||
|
{$ifdef ENDIAN_BIG}
|
||||||
|
FDibInfo.PixelMasks.A := $000000FF;
|
||||||
|
{$else}
|
||||||
|
FDibInfo.PixelMasks.A := $FF000000;
|
||||||
|
{$endif}
|
||||||
|
GetMaskShiftSize(FDibInfo.PixelMasks.A, FDibInfo.MaskShift.A, FDibInfo.MaskSize.A);
|
||||||
|
end
|
||||||
else begin
|
else begin
|
||||||
FDibInfo.PixelMasks.A := 0;
|
FDibInfo.PixelMasks.A := 0;
|
||||||
FDibInfo.MaskShift.A := 0;
|
FDibInfo.MaskShift.A := 0;
|
||||||
FDibInfo.MaskSize.A := 0;
|
FDibInfo.MaskSize.A := 0;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
if Info.Encoding = lrdeBitfield
|
if Info.Encoding = lrdeBitfield
|
||||||
then begin
|
then begin
|
||||||
@ -5223,6 +5236,14 @@ begin
|
|||||||
then begin
|
then begin
|
||||||
// not read yet
|
// not read yet
|
||||||
TheStream.Read(FDibInfo.PixelMasks, 3 * SizeOf(FDibInfo.PixelMasks.R));
|
TheStream.Read(FDibInfo.PixelMasks, 3 * SizeOf(FDibInfo.PixelMasks.R));
|
||||||
|
// check if added mask is valid
|
||||||
|
if (Info.PixelMasks.R or Info.PixelMasks.G or Info.PixelMasks.B) and Info.PixelMasks.A <> 0
|
||||||
|
then begin
|
||||||
|
// Alpha mask overlaps others
|
||||||
|
FDibInfo.PixelMasks.A := 0;
|
||||||
|
FDibInfo.MaskShift.A := 0;
|
||||||
|
FDibInfo.MaskSize.A := 0;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
GetMaskShiftSize(FDibInfo.PixelMasks.R, FDibInfo.MaskShift.R, FDibInfo.MaskSize.R);
|
GetMaskShiftSize(FDibInfo.PixelMasks.R, FDibInfo.MaskShift.R, FDibInfo.MaskSize.R);
|
||||||
GetMaskShiftSize(FDibInfo.PixelMasks.G, FDibInfo.MaskShift.G, FDibInfo.MaskSize.G);
|
GetMaskShiftSize(FDibInfo.PixelMasks.G, FDibInfo.MaskShift.G, FDibInfo.MaskSize.G);
|
||||||
|
Loading…
Reference in New Issue
Block a user