将椭圆绘制到数组

时间:2012-02-26 16:22:23

标签: c# wpf drawing

希望这将是一个相当简单的答案,但这并不是谷歌最简单的事情。

我打算用简单的形状做很多绘画,但实际结果不需要在最后阶段显示给用户,所以为了速度,我想知道是否存在c#/ WPF中的方法将简单的形状绘制到缓冲区而不需要BitmapSource的开销,所以最后我可以将它复制到WritableBitmap中。

这样的东西
PixelFormat pixelFormat = PixelFormats.Default;
int stride = bitmapWidth * pixelFormat.BitsPerPixel / 8;
byte[] pixels new byte[bitmapHeight * stride];
*some static library*.DrawOval(xpos=10,ypos=10,radius=5, pixels, stride, pixelFormat);

由于

1 个答案:

答案 0 :(得分:0)

WPF中的“将形状绘制到缓冲区”可以通过使用DrawingVisual将形状绘制到DrawingContext来完成。绘图完成后,DrawingVisual可以渲染为RenderTargetBitmap

示例:

DrawingVisual drawingVisual = new DrawingVisual();

using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
    drawingContext.DrawEllipse(null, new Pen(Brushes.Black, 1), new Point(100, 100), 50, 50);
}

Drawing drawing = drawingVisual.Drawing;

using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
    drawingContext.DrawDrawing(drawing);
    drawingContext.DrawEllipse(null, new Pen(Brushes.Black, 1), new Point(100, 100), 60, 60);
}

RenderTargetBitmap bitmap = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Default);
bitmap.Render(drawingVisual);