2010-03-04 15 views
15

WPF'de yazılmış SEM görüntü işleme uygulamasında çalışıyorum. DrawingVisuals (her bir "katman" için bir tane) kullanarak görüntü & bindirmeleri görüntüleyen, Canvas'dan türetilen bir görüntü görüntüleme kontrolüm var. Ayrıca, DrawingVisuals uygulamasında uygulanan ölçek & çeviri dönüşümünü kullanarak Zoom & Pan uygular.WPF'deki bitmapi pikselleri yumuşatmadan nasıl uzatabilirim

Tek tek pikselleri görmek için görüntüyü yakınlaştırdığımda, bitmap'i genişletmek için, bilerek filtrelemeyi kullanarak net bir şekilde görüntülenirler (WPF Direct3D aracılığıyla oluşturulduğu sürece sürpriz olmaz). Bununla birlikte, kullanım durumum için, Photoshop gibi herhangi bir görüntü düzenleyicide her zamanki gibi tek tek pikselleri keskin kutular olarak görmeyi tercih ederim. Bu yüzden uygulamamın kullanıcısı görüntüyü yakınlaştırıyor -> piksel düzeyinde çalışabiliyor.

WPF'de böyle bir seçenek var mı (görüntülemeden önce bitmapi el ile germe dışında)? Hiçbir şey bulamadım. peşin

sayesinde

cevap

16

Zbynek Vrastil Çek Cumhuriyeti Nihayet Uzmanlar Borsası bazı yardımıyla, bir cevap buldum. Class RenderOptions, En Yakın Komşu olarak ayarlanabilen ekli özellik BitmapScalingMode'u tanımlar. Böylece, hile yapmaz.

bu numarayı yapar. GDI + gibi NearestNeighbor eserler, o zaman bu size sınırlı bir başarı verecektir eğer

Zbynek Vrastil

+0

Cool! Beni çok fazla sorundan kurtardı. –

+11

Ve bunu XAML'den de ayarlayabilirsiniz: '' –

0

Nefret şeylerin bir sönümleyici koymak, bunlarla. Yüksek kontrastlı alanlarda büyütmeyi arttırdıkça istenen sonuçları alamayabilirsiniz. GDI + 'da siyahların maviye dönüştüğünü ve beyazların kırmızılaştığını görüyorsun - yine de yüksek kontrastlı alanlarda stresteyim! Bu WPF'de durum böyle değilse, kendinizi şanslı düşünün!

Belki bir WCF geliştiricisi bunu doğrulayabilirdi?

Göz önüne alınması gereken daha çok seçenek olduğunu öğrendim, ancak yalnızca bir kullanıcı için yararlı olabilecek GDI + Graphics sınıfı için konuşabilirim.

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

Bu benim için çalışır. Bence SmoothingMode numaradır. Umarım bu, başka birisine yardım eder.

İlgili konular