Pregunta

Busco para hacer un DrawingVisual (visual en el ejemplo) a un mapa de bits utilizando RenderTargetBitmap con el fin de establecer este mapa de bits como fondo a una Canvas como a continuación:

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

Cuando se utiliza PixelFormats.Default como último argumento a RenderTargetBitmap, la imagen se renderiza como se esperaba. Sin embargo, cuando decido PixelFormats.Indexed2 (o cualquiera de los PixelFormats.IndexedX), mi código parece salir del método sin excepción, la línea bmp.Render nunca es llamado y por lo tanto la imagen no se visualiza en la Canvas.

¿Cómo utilizar los formatos de píxeles con IndexedX RenderTargetBitmap? ¿O hay otras maneras de reducir el consumo de memoria de la imagen? Sólo utiliza tres colores, por lo que el uso de una paleta en lugar de 32 bits RGB parecía el camino a seguir.

¿Fue útil?

Solución

No se puede. RenderTargetBitmap sólo es compatible con el formato Pbgra32 píxel. Eso es porque el sistema de representación de WPF funciona completamente en 32 bits por píxel. Ese es el formato en el que se genera imágenes, y es también el formato en el que prefiere que las imágenes sean en si quiere hacerlas. (Si usted proporciona con un mapa de bits en cualquier otro formato, tendrá que convertirlo en una especie de representación 32 por píxel en primer lugar.)

¿Qué piensa hacer con este mapa de bits? Si desea procesar en una aplicación de WPF, que tendrá que ser convertidos a un formato de 32 bpp por primera vez en todo caso, por lo que corre el riesgo de utilizar más de memoria si se intenta mantener internamente en cualquier otro formato. (Usted tendrá su supuestamente eficaz memoria representación y la versión de WPF realmente capaces de trabajar con ellos.) Por no mencionar el tiempo de CPU adicional pasado la conversión entre el formato elegido y un formato de WPF puede trabajar con ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top