在 Delphi 中使用Alpha通道调整TBitmap的大小

jdg4fx2g  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(147)

我有一个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

相关问题