Question

Je cherche à rendre un DrawingVisual (visuel dans l'exemple) à un bitmap à l'aide RenderTargetBitmap en vue de définir cette bitmap comme arrière-plan à un Canvas comme suit:

var bmp = new RenderTargetBitmap(2000, 50, 120, 96, PixelFormats.Indexed2);
bmp.Render(visual);
var brush = new ImageBrush(bmp) { Stretch = Stretch.Fill };
Canvas.Background = brush;

Lors de l'utilisation PixelFormats.Default comme le dernier argument de RenderTargetBitmap, l'image Renders comme prévu. Cependant, lorsque je choisis PixelFormats.Indexed2 (ou l'un des PixelFormats.IndexedX), mon code semble sortir de la méthode sans exception, la ligne de bmp.Render est jamais appelé et donc l'image n'est pas affichée sur le Canvas.

Comment utiliser les formats de pixels IndexedX avec RenderTargetBitmap? Ou y at-il d'autres moyens de réduire l'empreinte mémoire de l'image? Il utilise seulement trois couleurs, donc en utilisant une palette plutôt que 32bit RVB semblait la voie à suivre.

Était-ce utile?

La solution

Vous ne pouvez pas. RenderTargetBitmap ne supporte que le format de pixel Pbgra32. Ce effet, le système de rendu de WPF fonctionne entièrement en 32 bits par pixel. C'est le format dans lequel il génère des images, et il est également le format dans lequel il préfère les images d'être si vous voulez les rendre. (Si vous fournissez avec un bitmap dans un autre format, il faudra la convertir en un 32 bits par pixel de représentation en premier.)

Qu'est-ce que vous envisagez de faire avec ce bitmap? Si vous voulez le rendre dans une application WPF, il faudra être converti en un format 32bpp premier dans tous les cas, vous risquez de l'aide plus mémoire si vous essayez de le maintenir en interne dans une autre format. (Vous aurez votre représentation prétendument économe en mémoire et la version réellement en mesure de WPF à travailler avec.) Sans parler du temps CPU supplémentaire passé la conversion entre le format choisi et un format WPF peut travailler avec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top