2012-02-26 4 views
0

Espérons que ce sera une réponse assez simple, mais ce n'est pas la chose la plus facile à google pour. J'ai l'intention de faire beaucoup de peinture en utilisant des formes simples, mais le résultat actuel n'a pas besoin d'être affiché à l'utilisateur jusqu'à la dernière étape, donc par souci de rapidité, je me demandais s'il y avait des méthodes existantes dans C#/WPF pour dessiner des formes simples dans un buffer sans le surcoût d'une BitmapSource, donc à la fin je peux simplement le copier dans un WritableBitmap.Dessiner Oval to array

Quelque chose comme

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

Merci

+1

Un bitmap est déjà un réseau interne. Vous n'allez pas accélérer ça. –

Répondre

0

« Dessiner des formes à un tampon » dans WPF pourrait se faire en dessinant des formes en utilisant un DrawingVisualDrawingContext. Lorsque le dessin est terminé, le DrawingVisual peut être rendu en .

Exemple:

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

Le problème avec ceci est que je veux pouvoir dessiner les formes, puis copier les pixels, faire un peu de traitement et ensuite revenir et dessiner d'autres formes sur le dessus si nécessaire. Si je rouvre le DrawingVisual pour peindre, je dois redessiner toutes les formes ... si je comprends bien. Sinon, le contrôleur de domaine est réinitialisé à blanc lorsqu'il est rouvert. – user1217210

+0

Tous les dessins d'un DrawingVisual sont accessibles par sa propriété [Drawing] (http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.drawing.aspx). Ce "dessin racine" peut être dessiné à nouveau dans un nouveau DrawingContext par [DrawDrawing] (http://msdn.microsoft.com/en-us/library/system.windows.media.drawingcontext.drawdrawing.aspx) avant de dessiner plus. Voir ma réponse éditée. – Clemens

+0

Ah, désolé j'ai raté cette propriété alors. Merci pour votre réponse. Je pense que ça va me faire du bien. – user1217210