2012-02-26 205 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