Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TWICImage:如何在JPG上覆盖透明PNG?_Delphi_Graphics_Png_Delphi 10.2 Tokyo_Wic - Fatal编程技术网

Delphi TWICImage:如何在JPG上覆盖透明PNG?

Delphi TWICImage:如何在JPG上覆盖透明PNG?,delphi,graphics,png,delphi-10.2-tokyo,wic,Delphi,Graphics,Png,Delphi 10.2 Tokyo,Wic,例如,我们有一个jpg格式的基本图像: 以及png格式的叠加图像: 我想从他们的合并中得到这张图片: 我的问题是:如何利用TWICImage的威力获得这个结果? 我可以像这样加载两个图像: function DoMerge: TWICImage; var wicJPG, wicPNG: TWICImage; begin wicJPG := TWICImage.Create; wicPNG := TWICImage.Create; try wicJPG.LoadF

例如,我们有一个jpg格式的基本图像:

以及png格式的叠加图像:

我想从他们的合并中得到这张图片:

我的问题是:如何利用TWICImage的威力获得这个结果?
我可以像这样加载两个图像:

function DoMerge: TWICImage;
var
  wicJPG,
  wicPNG: TWICImage;
begin
  wicJPG := TWICImage.Create;
  wicPNG := TWICImage.Create;
  try
    wicJPG.LoadFromFile('base.jpg');
    wicPNG.LoadFromFile('overlay.png');
    Result := wicJPG + wicPNG;  // (pseudo-code) how?
  finally
    wicPNG.Free;
    wicJPG.Free;
  end;
end;

我对TWICImage一无所知,只知道它是一个
TGraphic
后代。 因此,您可以尝试以下方法:

var
  B: TBitmap;

B := TBitmap.Create;
try
  B.Assign(wicJPG); 
  B.Canvas.Draw(0, 0, wicPNG);
  Result := TWICImage.Create;
  Result.Assign(B);
finally
  B.Free;
end;

我现在无法测试。

您可以创建
B:TBitmap
。伪:
B.Assign(wicJPG);wicPNG.Draw(B.Canvas);结果:分配(B)
@kobik[dcc32 Error]E2362无法访问受保护的符号TWICImage.draw可能是一个愚蠢的问题,但无论如何:为什么不使用Delphi提供的
TPngImage
,而不是玩弄
TWICImage
?@Dima WIC通常用于不知道类型的任意图像格式。所以事实上,如果OP只关心PNG,我希望它直接使用
TPngImage
,但如果它可能是另一种格式,这就是为什么。@JerryDodge谢谢你。你的解释让事情变得更清楚了)是的,很有效,谢谢。但我只想使用WIC特性(不涉及TBitmap)。是真的吗?我不确定。它可能通过它使用的
iwicmagingfactory
iwicmbitmap
接口实现。好的,如果我没记错的话,WIC图像是只读的。意思是,它不是用来操纵图像的。这就是
TBitmap
的目的。@Jerrydoge,在查看文档后,您可能会得到
TWICImage.Handle
,它返回一个
IWICBitmap
,并使用该方法访问底层像素数据,并将所需的覆盖数据复制到源中。祝你好运…;)似乎Delphi
TWICImage
包装器非常有限。是的,我认为Borland最初期望在
TBitmap
上进行任何图像处理。