2009-07-09 29 views
3

我有一個16位灰度圖像,我想在.NET 3.5 sp1中使用WPF進行顯示。目前,我使用嵌入式winform顯示該圖像,該圖像使用OpenGL將圖像顯示格式設置爲Luminance 16.WPF圖像和DirectX SurfaceFormat

DirectX具有類似的屬性,SurfaceFormat

我希望能夠以顯示WPF的圖像和SurfaceFormat設置爲Luminance16。我怎麼做?

注意:目前,儘管WPF本身支持Gray16,它不會呈現Gray16正常。

編輯:真正的答案是,WPF並沒有做它所說的。 Gray16在本地支持的情況下,實際上被256除以適合16位顯示器。所以,格雷格16格式是一個謊言,在眼睛裏像酸一樣燃燒。

回答

2

你不應該在WPF中這樣做。

WPF支持16bpp grayscale images natively。我相信它們可以使用內置的TIFF格式解碼器從TIF文件加載。


編輯的效應初探評論:

如果您不滿意WPF中的默認呈現,您還可以使用DirectX直接呈現在表面。這是最好的(使用C++/CLI),但完全可以在C#中使用SlimDX。

最好的辦法無非是要使用D3DImage。有一個介紹在CodeProject上使用它。考慮到DX的不同,你應該能夠直接移植你的OpenGL代碼。但D3DImage的好處在於,您不再需要託管一個通用控件 - 您可以將其直接放入WPF畫筆中,並在WPF中的任何位置使用它。

+0

是的,但在現實中,我這樣做。原生支持導致圖像抖動,就好像它們在OpenGl中顯示爲8位亮度圖像一樣。 – mmr 2009-07-09 16:50:16

+0

@mmr:我編輯了我的答案更多的信息。 – 2009-07-09 17:15:13

0

WPF是不是真正的問題 - 大多數屏幕不支持16位輸出,因此,你需要壓縮灰度級到8位的16位。

這可以通過除以256或通過使用基於直方圖算法潛水2^16個灰度級到另一方式256個箱來完成。

爲此,圖像處理是必需的,並且有許多關於不同方法的文章(搜索顯示高動態範圍圖像)。您可以使用HLSL着色器來提供幫助。