L'application WPF que j'ai compilée possède un Viewport3D contenant toutes sortes d'objets UIElement3D. Maintenant, je voudrais enregistrer un instantané haute résolution d'une certaine vue dans un fichier. J'ai essayé RenderTargetBitmap dans le passé, mais je ne l'aime pas cette approche en raison des inconvénients suivants:Utilisation de WPF en combinaison avec Rendu du matériel au lieu de RenderTargetBitmap
- fuites de mémoire (au moins avec .NET 3.5 SP1). Il devrait être résolu cependant avec 4.0, mais je n'ai pas encore testé.
- Le rendu logiciel ne donne pas les mêmes résultats que le rendu matériel lors de l'utilisation d'anti-aliasing et de pixel shaders.
- RenderTargetBitmap a besoin de beaucoup de temps (comme 10 secondes) pour former une image, au lieu de fraction de seconde nécessaire pour l'affichage à l'écran.
Alors je me demande s'il serait possible d'utiliser un VisualBrush, contenant une copie de l'instantané, dans une nouvelle commande/fenêtre (de préférence hors-champ) puis saisir le contenu auge l'aide de front- ou backbuffer DirectX ou techniques GDI . Je pourrais imaginer que la résolution au-delà des capacités de la carte graphique pourrait être un problème, mais cela pourrait être résolu en saisissant plusieurs sous-images et les assembler ensemble. Donc, quelqu'un avec quelques idées sur ce sujet? S'il vous plaît gardez à l'esprit que j'ai lu sur DirectX, XNA, SlimDX, GDI +, BitBlt et ainsi de suite, mais c'est à peu près toute l'expérience que j'ai sur ces questions. La plate-forme cible est Windows XP +. Si une solution est possible mais pas sur XP, je voudrais savoir aussi.
Meilleures salutations,
Jan van de Pol
I J'ai déjà vu cet article, mais je n'ai jamais réussi à le faire fonctionner. Avez-vous un échantillon ou connaissez-vous les étapes nécessaires pour récupérer le contenu d'un seul objet Viewport3D? En attendant, je suis passé à .NET 4.0 –