8
votes

Comment utiliser le dessin GDI + dans WPF?

Je veux utiliser le dessin GDI + dans mon contrôle WPF.


2 commentaires

Des raisons pour lesquelles? J'aimerais savoir


Performance. GDI est beaucoup plus rapide que le WPF à dessiner un grand nombre de lignes, des formes


5 Réponses :


2
votes

Essayez de composer un contrôle utilisateur de formulaire Windows dans votre projet WPF et encapsulez le dessin GDI +. Voir Procédure à suivre: Hébergement d'un contrôle de l'utilisateur Windows Formulaire en utilisant le concepteur WPF


1 commentaires

Sans utiliser les WinForms, il y a un moyen d'utiliser GDI + Dessin à l'aide de System :: Dessin :: Classe graphique?




-4
votes

C'est généralement une mauvaise idée. WPF est une API totalement nouvelle et mélange dans GDI + peut entraîner de mauvaises performances, des fuites de mémoire et d'autres objets indésirables.


1 commentaires

Cette réponse n'est évidemment pas basée sur une expérience réelle avec ces technologies.



9
votes

Il y a plusieurs façons de le faire, les plus faciles seraient de verrouiller votre bitmap que vous avez manipulé avec GDI, obtenez le tampon de pixels (Scan0 intPTR dans le bitmapdata que vous obtenez de la serrure). CopyMemory (...) de votre tampon de pixel à un WRITEOFYBITMAP.backbuffer .

Il existe des façons plus performantes dans WPF, comme à l'aide de l'interopbitmap au lieu de WripeOfBitMap. Mais cela a besoin de plus p / invoke.


0 commentaires

1
votes

La solution de @jeremiah Morrill est ce que vous feriez au cœur. Cependant, Microsoft était assez agréable pour fournir des méthodes interopes: xxx


3 commentaires

Quel est le GDI Espace de noms? On dirait que vous avez aliasé system.drawing à gdi (c'est-à-dire à l'aide de gdi = system.drawing) - pouvez-vous confirmer?


Système d'aliasing.Drawing to GDI Dans cet exemple est une mauvaise idée, car vous ne pouvez pas simplement copier et coller le code et ajoute également plus de confusion pour les lecteurs.


Y a-t-il une raison pour aliaser l'espace de noms? Bitmap a-t-il d'autres implémentations?