如何将零件从一个WriteableBitmap
复制到另一个WriteableBitmap
?我在过去编写和使用了几十个'copypixel‘和透明副本,但我似乎找不到与WPF C#相同的副本。
这要么是世界上最难的问题,要么是最简单的问题,因为绝对没有人会用十英尺长的杆子来接触它。
发布于 2013-07-31 17:56:35
使用http://writeablebitmapex.codeplex.com/中的WriteableBitmapEx,然后使用Blit方法,如下所示。
private WriteableBitmap bSave;
private WriteableBitmap bBase;
private void test()
{
bSave = BitmapFactory.New(200, 200); //your destination
bBase = BitmapFactory.New(200, 200); //your source
//here paint something on either bitmap.
Rect rec = new Rect(0, 0, 199, 199);
using (bSave.GetBitmapContext())
{
using (bBase.GetBitmapContext())
{
bSave.Blit(rec, bBase, rec, WriteableBitmapExtensions.BlendMode.Additive);
}
}
}
如果您不需要在目的地中保留任何信息,则可以使用BlendMode.None获得更高的性能。使用Additive时,可以在源和目标之间进行alpha合成。
发布于 2013-07-19 22:02:58
似乎没有一种方法可以直接从一个复制到另一个,但您可以分两步完成,使用数组和CopyPixels将它们从一个复制出来,然后使用WritePixels将它们复制到另一个。
发布于 2014-01-09 17:59:58
我同意Guy上面的观点,最简单的方法是简单地使用WriteableBitmapEx库;然而,Blit函数是用于合成前景和背景图像的。将一个WriteableBitmap的一部分复制到另一个WriteableBitmap的最有效方法是使用裁剪函数:
var DstImg = SrcImg.Crop(new Rect(...));
请注意,您的SrcImg
WriteableBitmap必须是Pbgra32格式,WriteableBitmapEx库才能对其进行操作。如果您的位图不是这种形式,那么您可以很容易地在裁剪之前转换它:
var tmp = BitmapFactory.ConvertToPbgra32Format(SrcImg);
var DstImg = tmp.Crop(new Rect(...));
https://stackoverflow.com/questions/17750310
复制相似问题