WPF-изображение и DirectX SurfaceFormat - PullRequest
3 голосов
/ 09 июля 2009

У меня есть 16-битное изображение в градациях серого, которое я хочу отобразить с помощью WPF в .NET 3.5 sp1. В настоящее время я отображаю это изображение с помощью встроенной winform, которая использует OpenGL для установки формата отображения изображения на Luminance 16.

DirectX имеет аналогичное свойство, SurfaceFormat .

Я хочу отображать изображение в WPF и установить для SurfaceFormat значение Luminance16. Как мне это сделать?

Примечание. В настоящее время, хотя WPF изначально поддерживает Gray16, он не отображает Gray16 должным образом.

Редактировать: Реальный ответ заключается в том, что WPF делает не то, что говорит. Gray16, хотя и поддерживается изначально, фактически делится на 256, чтобы уместиться в 16-битный дисплей. Таким образом, формат Gray16 - это ложь, которая горит, как кислота в глазах.

Ответы [ 2 ]

2 голосов
/ 09 июля 2009

Вам не нужно делать это в WPF.

WPF изначально поддерживает изображения в оттенках серого 16bpp . Я считаю, что они могут быть загружены из файла TIF с помощью встроенного декодера формата TIFF.


Редактировать в ответ на комментарий:

Если вы недовольны рендерингом по умолчанию в WPF, вы также можете использовать DirectX для непосредственного рендеринга поверхности. Это (таким образом) лучше всего делать с использованием C ++ / CLI, но это возможно полностью в C # с использованием SlimDX.

Наилучший подход - использовать D3DImage . Есть введение для использования этого на CodeProject . Вы должны иметь возможность напрямую переносить код OpenGL, принимая во внимание различия в DX. Хорошая особенность D3DImage заключается в том, что вам больше не нужно размещать общий элемент управления - вы можете поместить его непосредственно в кисть WPF и использовать в любом месте WPF.

0 голосов
/ 27 сентября 2009

WPF не является реальной проблемой - большинство экранов не поддерживают 16-битный вывод, поэтому вам необходимо сжать 16-битные уровни серого до 8-битных.

Это можно сделать путем деления на 256 или использования алгоритма на основе гистограммы для погружения уровня серого 2 ^ 16 в 256 бинов другим способом.

Для этого требуется обработка изображений, и существует множество статей о различных подходах (поиск изображений с высоким динамическим диапазоном). Вы можете использовать HLSL шейдеры, чтобы помочь.

...