I have a 16 bit grayscale image that I want to display using WPF in .NET 3.5 sp1. Currently, I display that image using an embedded winform that uses OpenGL to set the imag
WPF isn't the real issue - most screens do not support 16bit output, therefore you need to compress the 16bit of gray levels to 8bit.
This can be done by dividing by 256 or by using a histogram based algorithm for diving the 2^16 gray level into 256 bins in another manner.
For this, image processing is required and there are many articles on different approaches (search for displaying high dynamic range images). You could use HLSL shaders to help.
You shouldn't need to do this in WPF.
WPF supports 16bpp grayscale images natively. I believe they can be loaded from a TIF file using the built in TIFF format decoder.
Edit in reponse to comment:
If you're unhappy with the default rendering in WPF, you can also use DirectX to directly render the surface. This is (thusfar) best done using C++/CLI, but it is possible entirely in C# using SlimDX.
The best approach out there is to use D3DImage. There's an intro to using this on CodeProject. You should be able to port your OpenGL code across pretty much directly, taking into account the differences in DX. The nice thing about D3DImage, though, is that you no longer need to host a common control - you can put this directly into a WPF Brush and use it anywhere in WPF.