2010-03-04 7 views
15

Estoy trabajando en la aplicación de procesamiento de imágenes SEM, escrita en WPF. Tengo un control de visualización de la imagen, derivado de Canvas, que muestra las superposiciones de imágenes & usando DrawingVisuals (una para cada "capa"). También implementa Zoom & Pan utilizando la escala & translate transform, aplicada en DrawingVisuals.¿Cómo puedo estirar el mapa de bits en WPF sin suavizar píxeles?

Cuando hago un acercamiento de la imagen para ver píxeles individuales, se muestran sin problemas, evidentemente utilizando el filtrado bilineal para estirar el mapa de bits (no es de extrañar, ya que WPF se procesa a través de Direct3D). Sin embargo, para mi caso de uso, preferiría ver píxeles individuales como cuadros nítidos, como es habitual en cualquier editor de imágenes como Photoshop. Es por eso que el usuario de mi aplicación amplía la imagen -> para poder operar a nivel de píxel.

¿Existe esa opción en WPF (aparte de estirar manualmente el mapa de bits antes de mostrarlo)? No pude encontrar nada.

gracias de antemano, Zbynek Vrastil República Checa

Respuesta

16

encontrado por fin una respuesta, con la ayuda de intercambio de los expertos. Class RenderOptions define la propiedad adjunta BitmapScalingMode, que se puede establecer en NearestNeighbor. Por lo tanto,

RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor); 

hace el truco.

Zbynek Vrastil

+0

¡Genial! Me ahorró muchos problemas. –

+11

Y también puede configurarlo desde XAML: '' –

0

gusta poner un amortiguador en las cosas, pero si NearestNeighbor obras como GDI +, entonces esto le dará un éxito limitado. A medida que aumenta la ampliación en áreas de alto contraste, es posible que no obtenga los resultados deseados. En GDI +, los negros se vuelven azules y los blancos se vuelven rojos; ¡nuevamente insisto en áreas de alto contraste! Si este no es el caso en WPF, ¡piense que tiene suerte!

¿Quizás un desarrollador de WCF podría confirmar eso?

Descubrí que hay más opciones para considerar, pero solo puedo hablar por la clase GDI + Graphics, que podría ser útil para alguien.

Graphics graph = e.Graphics; 
graph.InterpolationMode = InterpolationMode.NearestNeighbor; 
graph.CompositingQuality = CompositingQuality.AssumeLinear; 
graph.SmoothingMode = SmoothingMode.None; 

Esto funciona para mí. Creo que el SmoothingMode es el truco. Espero que esto ayude a alguien más allá.

Cuestiones relacionadas