2012-02-26 18 views
0

うまくいけば、これはかなり簡単な答えになるだろうが、Googleにとって最も簡単なことではない。楕円形を配列に描画する

私は単純な形を使ってたくさんの絵を描こうとしていますが、実際の結果は最終段階までユーザーに表示する必要はありませんので、スピードのために、 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

は、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

+0

DrawingVisualのすべての図面は、[Drawing](http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.drawing.aspx)プロパティでアクセスできます。この "ルート描画"は、描画する前に[DrawDrawing](http://msdn.microsoft.com/en-us/library/system.windows.media.drawingcontext.drawdrawing.aspx)で新しいDrawingContextに再度描画できます。私の編集された答えを見てください。 – Clemens

+0

ああ、すみません、私はその物件を見逃しました。ご回答有難うございます。私はこれでいいと思うよ。 – user1217210

関連する問題