合并两个位图的问题

Posted

技术标签:

【中文标题】合并两个位图的问题【英文标题】:Issues with merging two bitmaps 【发布时间】:2017-12-13 20:02:32 【问题描述】:

我正在尝试在另一个之上添加一个位图(png 文件),然后将其保存到设备中。除了第一部分,一切都很好。

我的代码片段:

1 将加载的文件转换为位图

loadedBitmap = e.target.content as Bitmap;
clonedBitmap = new Bitmap(loadedBitmap.bitmapData.clone());

bitmapData = new BitmapData(e.target.content.width, e.target.content.height);
bitmapData.draw(clonedBitmap);

在应用内生成 2 秒位图

genBitmapData = new BitmapData(bgWidth, bgHeight, false);
genBitmap = new Bitmap(genBitmapData);

3 将 clonedBitmap(外部文件)添加到 bitmapdata

var positionMatrix : Matrix = new Matrix(1,0,0,1,0,0);
genBitmapData.draw(clonedBitmap, positionMatrix);

第三步的问题在于,加载的文件 clonedBitmap 最终位于应用程序在将其保存到设备存储时生成的位图之下。当我颠倒顺序时:

bitmapData.draw(genBitmap, positionMatrix);

只有生成的位图显示/可见,而加载的位图在保存文件时根本不可见。我想要实现的是将 clonedBitmap(外部 png 文件)放在 genBitmap 之上并使用 BitmapData 对象保存,这样我就可以将它保存到我的设备中。

如果有任何提示,我将不胜感激。

【问题讨论】:

你在这里做了一些很奇怪的事情。您不能只使用两个 Bitmap 对象并根据需要对它们进行 z-order 吗?此外,当您可以克隆原始 BitmapData 时,通过 drawinng 克隆位图是另一件奇怪的事情。 【参考方案1】:

当您在位图上绘制位图时,您需要覆盖的位图在某处是透明的,否则所有较低位图的像素都会被上层覆盖。因此,使用 alpha 通道创建那些位图(透明度 = true),确保在上层位图上绘制一些东西后(至少在某处)也是透明的,然后在单个 上先绘制下层然后上层 BitmapData 对象。

请注意,由于您不转换任何位图,因此您最好使用BitmapData.copyPixels() 方法。

【讨论】:

【参考方案2】:

事实证明代码运行良好。我只是忽略了并将其放置在错误的函数中,从而导致了问题。

【讨论】:

以上是关于合并两个位图的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何合并具有特定移位(偏移)的两个位图?

bitmap 合并图片

如何融合两个 16 位图像

将两个图像合并为一个方向问题

覆盖两个或多个位图以在Picturebox中显示(C#)

Redis学习 —— 管道 与 位图