我有一个TBitmap
在 Delphi 与阿尔法通道。它来自于用TPNGImage加载PNG,然后提取TBitmap。
这工作完美。
现在,我想缩放这个TBitmap,我发现scaledraw
的质量很低,不能处理透明度,所以我下载了Image 32库(https://github.com/AngusJohnson/Image32)
代码如下所示:
var inBitmap: TImage32 := TImage32.Create;
var outBitmap: TBitmap := TBitmap.Create;
try
inBitmap.CopyFromBitmap(inPict.Bitmap);
inBitmap.Resampler := rBicubicResampler;
inBitmap.Resize(scale.Width, scale.Height); // New size
inBitmap.Crop(newRect); // Take only the required part.
outBitmap.PixelFormat := pf32bit; // I think it's not required
inBitmap.CopyToBitmap(outBitmap);
finally
FreeAndNil(inBitmap);
FreeAndNil(outBitmap);
end;
这似乎在Lazarus FPC上工作得很好,但在 Delphi 上不行:图像被缩放,但具有奇怪的伪影:
缩放前,在平面颜色的顶部绘制:
缩放后,在相同平面颜色的顶部绘制:
注意,对于绘图,我使用以下行:
Canvas.Draw(x, y, outBitmap);
如何正确缩放TBitmap的透明度?(必须与Lazarus/FPC和Linux跨平台)
完整的项目可以在这里找到:
https://github.com/Escain/TestImage32
1条答案
按热度按时间svdrlsy41#
我相信这个问题不在Image32库中。
请参阅此处的讨论:
https://github.com/AngusJohnson/Image32/issues/30