Я использую WPF для изображения, изменяющего размер конвейера, который работал красиво под.NET v3.5. Я просто обновил проект предназначаться для v4.0, и теперь все мои измененные изображения в большой степени искажаются. Ни один из конвейерного кода изображения не изменился.
Установка WPF по умолчанию изменилась между v3.5 и v4.0?
Как я управляю размыванием своих измененных растровых изображений в WPF?
Я использую BitmapImage
, DrawingVisual
, DrawingContext
, RenderTargetBitmap
, BitmapEncoder
, и BitmapFrame
но я не вижу свойств, связанных с размыванием. GDI + имел набор настроек, таким образом, я предполагаю, что пропускаю что-то.
Обновление: кажется, что все решения, которые я видел, принимают Объект окна или среду XAML. Это работает в службе Windows, которая не имеет никакого UI. Мне нужен способ программно влиять на эту установку.
Я конкретно переключился от GDI + к WPF, потому что GDI + имеет утечки памяти в длительных процессах как сервисы и веб-приложения.
Единственный способ, которым я смог повлиять на настройку BitmapScalingMode
, - это унаследовать от класса DrawingVisual
и установить его через его защищенный метод доступа. :
// exposes BitmapScalingMode (also works for other protected properties)
public class MyDrawingVisual : DrawingVisual
{
public BitmapScalingMode BitmapScalingMode
{
get { return this.VisualBitmapScalingMode; }
set { this.VisualBitmapScalingMode = value; }
}
}
Если кто-нибудь знает, как это сделать лучше, я был бы рад услышать об этом.
Похоже, это сработает:
RenderOptions.SetBitmapScalingMode(myDrawingVisual, BitmapScalingMode.HighQuality);
... но это не так. Очевидно, что нахождение вне среды выполнения окон XAML должно означать, что она не может установить соответствующие значения.
По умолчанию BitmapScalingMode был Fant в 3.0, но теперь в 4.0 он стал BiLinear. Вы можете изменить значение по умолчанию несколькими способами. Пара описана здесь .