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