From 960131938743495c74408840b1ab213582f7924b Mon Sep 17 00:00:00 2001 From: marc Date: Sun, 7 Jun 2009 16:38:54 +0000 Subject: [PATCH] * fixed compatebility with 32bpp bitmaps and alpha channel (issue #13917) git-svn-id: trunk@20498 - --- lcl/intfgraphics.pas | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lcl/intfgraphics.pas b/lcl/intfgraphics.pas index cc1946c829..e6969df4d5 100644 --- a/lcl/intfgraphics.pas +++ b/lcl/intfgraphics.pas @@ -5212,9 +5212,22 @@ begin GetMaskShiftSize(FDibInfo.PixelMasks.A, FDibInfo.MaskShift.A, FDibInfo.MaskSize.A); end else begin - FDibInfo.PixelMasks.A := 0; - FDibInfo.MaskShift.A := 0; - FDibInfo.MaskSize.A := 0; + // 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 + FDibInfo.PixelMasks.A := 0; + FDibInfo.MaskShift.A := 0; + FDibInfo.MaskSize.A := 0; + end; end; if Info.Encoding = lrdeBitfield @@ -5223,6 +5236,14 @@ begin then begin // not read yet 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; GetMaskShiftSize(FDibInfo.PixelMasks.R, FDibInfo.MaskShift.R, FDibInfo.MaskSize.R); GetMaskShiftSize(FDibInfo.PixelMasks.G, FDibInfo.MaskShift.G, FDibInfo.MaskSize.G);