所以我正在尝试绘制叠加层。该覆盖图每40毫秒更新一次(这必须是高速)。似乎wpf没有绘制位图,所以我尝试将Bitmap转换为Bitmapsource。问题是转换几乎要复制它来转换它。位图不是线程安全的,然后在保存的过程中,它试图更新它并爆炸。锁似乎不想工作。
我的目标是创建一次叠加层,并重复使用它(清除它或其他东西)。有没有办法:
这是C#库中的绘图方法。成像库似乎是特定于wpf的,所以我不能在开始时使用WriteableBitmap。
private void UpdateOverlay(List<DrawableShape> shapes, Bitmap bitmap)
{
using (var g = Graphics.FromImage(bitmap)) //explosion here( ui thread usually using it at this time).
{
//g.Clear(Color.Transparent);
foreach (var shape in shapes)
{
switch (shape.Type)
{
case ShapeType.Circle:
g.DrawEllipse(new Pen(shape.Color), shape.Dimensions);
break;
case ShapeType.CircleFilled:
g.FillEllipse(new SolidBrush(shape.Color), shape.Dimensions);
break;
case ShapeType.Square:
g.DrawRectangle(new Pen(shape.Color), shape.Dimensions);
break;
case ShapeType.SquareFilled:
g.FillRectangle(new SolidBrush(shape.Color), shape.Dimensions);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
其余的只是使用值转换器绑定到叠加层,该值转换器调用CreateBitmapSourceFromHBitmap或将位图保存为流等。
非常感谢对此事的任何帮助或见解!
答案 0 :(得分:1)
使用WriteableBitmap。它维护一个前后缓冲区,因此您可以在后缓冲区上写入,同时前缓冲区显示在Image
元素中。当您完成后台缓冲区后,数据将被复制到前面。