2010-05-26 1 views
4

Есть ли способ указать, как изображение масштабируется в элементе Image с LayoutTransform, установленным на ScaleTransform с целыми значениями для ScaleX и ScaleY?Как указать алгоритм масштабирования изображения, используемый изображением WPF?

Я хочу, чтобы изображение масштабированного изображения было четким (т.е. с использованием масштабирования «ближайшего соседа»), без размытия. (Представьте, как бы вы хотели, чтобы программа редактирования растровых изображений вела себя при масштабировании).

Я заметил, защищаемое свойство VisualBitmapScalingMode на Image, поэтому создал подкласс Image, который устанавливает это свойство BitmapScalingMode.NearestNeighbor. Однако это не имело никакого эффекта.

+0

Ваш подкласс не изменит, как работает ScaleTransform. Пробовали ли вы установить размер изображения вручную (ширина/высота), чтобы увидеть, является ли он четким? – Will

+0

К сожалению, нет. Если я разворачиваю изображение, задав ширину и высоту, я получаю тот же результат, что и применение ScaleTransform. Что имеет смысл, я думаю, учитывая это в любом случае, в конечном итоге Image, который решает, как сделать себя с учетом размера и растрового изображения. – mackenir

+0

Получили ли вы лучшие результаты с TransformedBitmap? – Will

ответ

8

Я установил это, перекрывая OnRender в моих изображениях подкласса и установке VisualBitmapScalingMode перед нанесением изображения:

class MyImage : System.Windows.Controls.Image 
    { 
    protected override void OnRender(DrawingContext dc) 
    { 
     this.VisualBitmapScalingMode = System.Windows.Media.BitmapScalingMode.NearestNeighbor; 
     base.OnRender(dc); 
    } 
    } 
+0

Это отлично работает. Я использовал его для противоположного эффекта (например, метод Fant), но получил именно то, что хотел – Gleno

7

Вы можете установить RenderOptions.BitmapScalingMode свойства в XAML для контроля изображения. Нет необходимости наследовать класс Image.

+0

У меня есть зум-управление, которое меняет трансформирование ребенка, изображение внутри ребенка размыто даже в режиме NearestNeighbor. Решение OnRender (WPF 4.6.2) – Soonts