wpf v4でエイリアシングをサイズ変更しますが、v3.5の下ではありません
-
24-10-2019 - |
質問
.NET v3.5の下で美しく機能しているパイプラインのサイズ変更画像にWPFを使用しています。プロジェクトをV4.0をターゲットにアップグレードしたばかりで、変更された画像はすべて非常にエイリアスされています。画像パイプラインコードのいずれも変更されていません。
v3.5とv4.0の間でデフォルトのWPF設定が変更されましたか?
WPFでサイズ変更されたビットマップ画像のディザリングを制御するにはどうすればよいですか?
私は使用しています BitmapImage
, DrawingVisual
, DrawingContext
, RenderTargetBitmap
, BitmapEncoder
, 、 と BitmapFrame
しかし、私はディザリングに関連するプロパティを見ていません。 GDI+にはたくさんの設定があったので、何かが足りないと推測しています。
アップデート: 私が見たすべてのソリューションは、ウィンドウオブジェクトまたはXAML環境を想定しているようです。これは、UIがないWindowsサービス内で実行されます。この設定にプログラム的に影響を与える方法が必要です。
GDI+には、サービスやWebアプリなどの長い実行プロセスでメモリリークがあるため、GDI+からWPFに特に切り替えました。
解決
私がの設定に影響を与えることができた唯一の方法 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でFANTでしたが、4.0ではBILINEARになりました。デフォルトをいくつかの異なる方法で変更できます。カップル ここで説明します.