Как растянуть растровое изображение в WPF без сглаживания пикселей - PullRequest
17 голосов
/ 04 марта 2010

Я работаю над приложением обработки изображений SEM, написанным на WPF. У меня есть элемент управления отображением изображения, полученный из Canvas, который отображает изображения и наложения с помощью DrawingVisuals (по одному на каждый «слой»). Он также реализует Zoom & Pan, используя преобразование масштабирования и преобразования, примененное к DrawingVisuals.

Когда я увеличиваю изображение, чтобы увидеть отдельные пиксели, они отображаются плавно, очевидно, с использованием билинейной фильтрации, чтобы растянуть растровое изображение (не удивительно, поскольку WPF визуализируется через Direct3D). Однако для моего случая использования я бы предпочел видеть отдельные пиксели в виде четких рамок, как обычно в любом графическом редакторе, таком как Photoshop. Вот почему пользователь моего приложения увеличивает изображение ->, чтобы иметь возможность работать на уровне пикселей.

Есть ли такая опция в WPF (кроме ручного растягивания растрового изображения перед его отображением)? Я не смог ничего найти.

спасибо заранее, Збынек Врастил Чехия

Ответы [ 2 ]

18 голосов
/ 05 марта 2010

Наконец-то нашел ответ, с некоторой помощью Эксперта по обмену. Класс RenderOptions определяет вложенное свойство BitmapScalingMode, которое можно установить в NearestNeighbor. Итак,

RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor);

делает свое дело.

Збынек Врастил

0 голосов
/ 16 марта 2012

Ненавижу ставить демпферы на вещи, но если NearestNeighbor работает как GDI +, то это даст вам ограниченный успех. При увеличении увеличения в областях с высокой контрастностью вы можете не получить желаемых результатов. В GDI + черные становятся синими, а белые - красными - я опять подчеркиваю в областях с высокой контрастностью! Если это не так в WPF, подумайте, что вам повезло!

Возможно, разработчик WCF может это подтвердить?

Я обнаружил, что есть и другие варианты, но я могу говорить только о классе GDI + Graphics, который может кому-то пригодиться.

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

Это работает для меня. Я думаю, что SmoothingMode это трюк. Надеюсь, это поможет кому-то еще.

...