diff --git a/lcl/graphtype.pp b/lcl/graphtype.pp index 64d2adcf49..c8166f6970 100644 --- a/lcl/graphtype.pp +++ b/lcl/graphtype.pp @@ -97,7 +97,7 @@ type RedPrec: cardinal; // red precision. bits for red RedShift: cardinal; GreenPrec: cardinal; - GreenShift: cardinal; // bitshift. Direction: from least to most signifikant + GreenShift: cardinal; // bitshift. Direction: from least to most significant BluePrec: cardinal; BlueShift: cardinal; AlphaPrec: cardinal; @@ -269,16 +269,21 @@ begin Result:=false; // slow test - if TestPixels then begin + if TestPixels + then begin Width:=RawImage^.Description.Width; Height:=RawImage^.Description.Height; - if RawImage^.Description.AlphaSeparate then begin + + if RawImage^.Description.AlphaSeparate + then begin BitsPerLine:=GetBitsPerLine(Width,RawImage^.Description.AlphaBitsPerPixel, RawImage^.Description.AlphaLineEnd); UsedBitsPerLine:=Width*RawImage^.Description.AlphaBitsPerPixel; if RawImage^.MaskSize0 then begin - if FDataDescription.AlphaSeparate then begin - if (FMaskData<>nil) then begin + + if FDataDescription.AlphaPrec>0 + then begin + if FDataDescription.AlphaSeparate + then begin + if (FMaskData<>nil) + then begin GetXYMaskPostion(x,y,MaskPosition); ReadRawImageBits(FMaskData,MaskPosition, FDataDescription.AlphaBitsPerPixel, FDataDescription.AlphaPrec, FDataDescription.AlphaShift, FDataDescription.AlphaBitOrder,Value.Alpha); - end else begin + end + else begin // no alpha mask -> set opaque Value.Alpha:=high(Value.Alpha); end; - end else - ReadRawImageBits(FPixelData,Position,FDataDescription.BitsPerPixel, - FDataDescription.AlphaPrec,FDataDescription.AlphaShift, - FDataDescription.AlphaBitOrder,Value.Alpha) - end else begin + end + else begin + // alpha included + ReadRawImageBits(FPixelData,Position, + FDataDescription.BitsPerPixel, + FDataDescription.AlphaPrec, + FDataDescription.AlphaShift, + FDataDescription.BitOrder,Value.Alpha) + end + end + else begin // no alpha -> set opaque Value.Alpha:=high(Value.Alpha); end; @@ -1133,8 +1156,10 @@ begin ricfGray: begin - ReadRawImageBits(FPixelData,Position,FDataDescription.BitsPerPixel, - FDataDescription.RedPrec,FDataDescription.RedShift, + ReadRawImageBits(FPixelData,Position, + FDataDescription.BitsPerPixel, + FDataDescription.RedPrec, + FDataDescription.RedShift, FDataDescription.BitOrder,Value.Red); Value.Green:=Value.Red; Value.Blue:=Value.Red; @@ -1165,33 +1190,48 @@ begin case FDataDescription.Format of ricfRGBA: begin - WriteRawImageBits(FPixelData,Position,FDataDescription.BitsPerPixel, - FDataDescription.RedPrec,FDataDescription.RedShift, + WriteRawImageBits(FPixelData,Position, + FDataDescription.BitsPerPixel, + FDataDescription.RedPrec, + FDataDescription.RedShift, FDataDescription.BitOrder,Value.Red); - WriteRawImageBits(FPixelData,Position,FDataDescription.BitsPerPixel, - FDataDescription.GreenPrec,FDataDescription.GreenShift, + WriteRawImageBits(FPixelData,Position, + FDataDescription.BitsPerPixel, + FDataDescription.GreenPrec, + FDataDescription.GreenShift, FDataDescription.BitOrder,Value.Green); - WriteRawImageBits(FPixelData,Position,FDataDescription.BitsPerPixel, - FDataDescription.BluePrec,FDataDescription.BlueShift, + WriteRawImageBits(FPixelData,Position, + FDataDescription.BitsPerPixel, + FDataDescription.BluePrec, + FDataDescription.BlueShift, FDataDescription.BitOrder,Value.Blue); - if FDataDescription.AlphaPrec>0 then begin - if FDataDescription.AlphaSeparate then begin - if (FMaskData<>nil) then begin + if FDataDescription.AlphaPrec>0 + then begin + if FDataDescription.AlphaSeparate + then begin + if (FMaskData<>nil) + then begin GetXYMaskPostion(x,y,MaskPosition); WriteRawImageBits(FMaskData,MaskPosition, FDataDescription.AlphaBitsPerPixel, FDataDescription.AlphaPrec, FDataDescription.AlphaShift, FDataDescription.AlphaBitOrder,Value.Alpha); - end else begin + end + else begin // no alpha mask end; - end else - WriteRawImageBits(FPixelData,Position,FDataDescription.BitsPerPixel, + end + else begin + // alpha included + WriteRawImageBits(FPixelData,Position, + FDataDescription.BitsPerPixel, FDataDescription.AlphaPrec, FDataDescription.AlphaShift, - FDataDescription.AlphaBitOrder,Value.Alpha) - end else begin + FDataDescription.BitOrder, Value.Alpha) + end + end + else begin // no alpha end; end;