LazMapViewer: Fix drawing of scaled transparent tiles by RGBGraphics drawing engine. Issue #39078.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9500 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
9eec695b86
commit
92d090919b
@ -278,6 +278,7 @@ begin
|
|||||||
try
|
try
|
||||||
try
|
try
|
||||||
FImage := TRGB32Bitmap.CreateFromStream(AStream, Reader);
|
FImage := TRGB32Bitmap.CreateFromStream(AStream, Reader);
|
||||||
|
|
||||||
// Make sure that all tiles have the size defined by TileSize.
|
// Make sure that all tiles have the size defined by TileSize.
|
||||||
StretchImageIfNeeded(FImage, TileSize.CX, TileSize.CY);
|
StretchImageIfNeeded(FImage, TileSize.CX, TileSize.CY);
|
||||||
except
|
except
|
||||||
@ -298,19 +299,10 @@ end;
|
|||||||
Needed to have all tiles at the same size. }
|
Needed to have all tiles at the same size. }
|
||||||
procedure TRGB32BitmapCacheItem.StretchImageIfNeeded(var AImage: TRGB32Bitmap;
|
procedure TRGB32BitmapCacheItem.StretchImageIfNeeded(var AImage: TRGB32Bitmap;
|
||||||
ANewWidth, ANewHeight: Integer);
|
ANewWidth, ANewHeight: Integer);
|
||||||
var
|
|
||||||
w, h: Integer;
|
|
||||||
begin
|
begin
|
||||||
if AImage = nil then
|
if Assigned(AImage) then
|
||||||
exit;
|
if (AImage.Width <> ANewWidth) or (AImage.Height <> ANewHeight) then
|
||||||
w := AImage.Width;
|
AImage.StretchTrunc(ANewWidth, ANewHeight);
|
||||||
h := AImage.Height;
|
|
||||||
if (w <> ANewWidth) or (h <> ANewHeight) then
|
|
||||||
begin
|
|
||||||
// AImage.SaveToFile('test512.png');
|
|
||||||
AImage.StretchTrunc(ANewWidth, ANewHeight);
|
|
||||||
// AImage.SaveToFile('test256.png');
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TMvRGBGraphicsDrawingEngine.Destroy;
|
destructor TMvRGBGraphicsDrawingEngine.Destroy;
|
||||||
@ -422,17 +414,15 @@ procedure TMvRGBGraphicsDrawingEngine.DrawCacheItem(X, Y: Integer;
|
|||||||
AImg: TPictureCacheItem; ADrawMode: TItemDrawMode; AOpacity: Single);
|
AImg: TPictureCacheItem; ADrawMode: TItemDrawMode; AOpacity: Single);
|
||||||
var
|
var
|
||||||
Item: TRGB32BitmapCacheItem;
|
Item: TRGB32BitmapCacheItem;
|
||||||
Alpha: Byte;
|
|
||||||
begin
|
begin
|
||||||
Item := (AImg as TRGB32BitmapCacheItem);
|
Item := (AImg as TRGB32BitmapCacheItem);
|
||||||
if ADrawMode = idmDraw then
|
case ADrawMode of
|
||||||
FBuffer.Draw(X, Y, Item.Image)
|
idmDraw:
|
||||||
else
|
FBuffer.Draw(X, Y, Item.Image);
|
||||||
begin
|
idmUseOpacity:
|
||||||
if ADrawMode = idmUseOpacity
|
AlphaBlendImages(FBuffer, Item.Image, X, Y, round(AOpacity * 255));
|
||||||
then Alpha := Round(AOpacity * 255)
|
idmUseSourceAlpha:
|
||||||
else Alpha := 0;
|
AlphaBlendImages(FBuffer, Item.Image, X, Y);
|
||||||
AlphaBlendImages(FBuffer, Item.Image, X, Y, Alpha);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user