【问题标题】:how copy selected area from TPngObject to another TPngObject preserving its transparency如何将选定区域从 TPngObject 复制到另一个 TPngObject 保留其透明度
【发布时间】:2011-06-21 04:04:16
【问题描述】:

我有两个不同的 TPngObject SRC 和 DST。 SRC 分配了一个 PNG 图形。

我的代码:

dst := TpngImage.createblank(COLOR_RGB, 16, 900, 60);
src.Assign(Image2.Picture.Graphic);

但我需要将 src 的某些部分复制到 dst。我尝试在画布上复制和绘制,但不适用于透明。

【问题讨论】:

  • 当我将代码读取到 TPngImage 时,如果 TransparencyMode 设置为 ptmPartial,那么 alpha 通道将受到尊重。我想知道为什么在加载 PNG 图像时 TransparencyMode 没有设置为 ptmPartial

标签: delphi image graphics canvas png


【解决方案1】:

我认为您应该可以使用 AlphaBlend 函数来执行此操作。您使用{SRC/DEST}.Canvas.Handle 作为HDC 参数。

我希望您也可以通过 BitBlt 实现此目的。

我仍然对 TPNGImage 实例的 TransparencyMode 属性的值感到好奇。

【讨论】:

    【解决方案2】:

    我不使用 TPNGImage,但我会尝试一下……它是否支持 Pixels 属性或 Scanline?如果是这样,您可以仅复制所需的像素,手动设置 r、g、b 和 a 值。我经常用 pf32bit 位图来做这件事。正如您所注意到的,绘制它不会保留透明度。您必须手动设置 alpha 值。

    如果 TPNGImage 不支持像素或扫描线,您可以先将 png 转换为位图并这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多