Изменение размера изображения в Alias WPF v4, но не под v3.5
Я использую WPF для конвейера изменения размера изображения, который прекрасно работал в.NET v3.5. Я только что обновил проект до версии 4.0, и теперь все мои изображения с измененным размером сильно наложены. Ни один из кодов конвейера изображения не изменился.
Изменены ли настройки WPF по умолчанию между версиями 3.5 и 4.0?
Как я могу контролировать сглаживание моих измененных растровых изображений в WPF?
я использую BitmapImage
, DrawingVisual
, DrawingContext
, RenderTargetBitmap
, BitmapEncoder
, а также BitmapFrame
но я не вижу никаких свойств, связанных с размыванием. У GDI+ была куча настроек, поэтому я предполагаю, что что-то упустил.
Обновление: кажется, что все решения, которые я видел, предполагают объект Window или среду XAML. Это работает внутри службы Windows, которая не имеет пользовательского интерфейса. Мне нужен способ программно повлиять на этот параметр.
Я специально переключился с GDI+ на WPF, потому что GDI+ имеет утечки памяти при длительных процессах, таких как сервисы и веб-приложения.
2 ответа
Единственный способ, которым я смог повлиять на настройку 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. Вы можете изменить настройки по умолчанию несколькими различными способами. Пара описана здесь.