2012-02-26 204 views
0

希望这将是一个相当简单的答案,但这不是谷歌最容易的事情。绘制椭圆阵列

我打算使用简单的形状做很多绘画,但实际结果不需要显示给用户,直到最后阶段,所以为了速度,我想知道是否有现有的方法在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

位图已经在内部的阵列。你不会加快速度。 – 2012-02-26 18:17:13

回答

0

“绘制形状,以缓冲”在WPF可以通过使用DrawingContext绘制形状为DrawingVisual来完成。绘图完成后,DrawingVisual可以呈现为。

实施例:

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); 
+0

与此相关的问题是,我希望能够绘制形状,然后复制像素,进行一些处理,然后返回并根据需要在顶部绘制更多形状。如果我重新绘制DrawingVisual进行绘画,则必须重绘所有形状......如果我理解正确。否则,重新打开时DC会重置为空白。 – user1217210 2012-02-26 21:01:52

+0

DrawingVisual中的所有图形均可通过其[Drawing](http://msdn.microsoft.com/zh-cn/library/system.windows.media.drawingvisual.drawing.aspx)属性进行访问。在绘制更多图形之前,可以通过[DrawDrawing](http://msdn.microsoft.com/en-us/library/system.windows.media.drawingcontext.drawdrawing.aspx)将该“根绘图”再次绘制到新的DrawingContext中。看到我编辑的答案。 – Clemens 2012-02-27 08:32:31

+0

啊,对不起,我错过了那个属性。感谢您的回答。我认为这会让我很好。 – user1217210 2012-02-27 20:46:52