2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WPF Imageコントロールの拡大・縮小アルゴリズム変更方法

Last updated at Posted at 2015-11-06

WPFのImageコントロールを用いて画像を表示するアプリケーションを開発していたのですが、画像を拡大・縮小した際に、Frameworkのバージョンを3.5から4.0以降にあげたると画質が劣化するという問題が発生しました。

色々調べてみると、以下のことが分かりました。
1.拡大縮小のアルゴリズムはImageコントロールのVisualBitmapScalingModeプロパティで決定される
2.VisualBitmapScalingModeの値は、デフォルトでBitmapScalingMode列挙体のUnspecifiedが設定されている
3.BitmapScalingMode列挙体のUnspecifiedの値は.NET 3.5以前はFantと同等だが、4.0以降はLinear同等となる

以下はMSDNの関連情報です。
.NET Framework 3.5
https://msdn.microsoft.com/ja-jp/library/system.windows.media.bitmapscalingmode(v=vs.90).aspx
.NET Framework 4.0
https://msdn.microsoft.com/ja-jp/library/system.windows.media.bitmapscalingmode(v=vs.100).aspx

で、問題はVisualBitmapScalingModeプロパティのアクセシビリティがprotected internalな事です。
この為、普通に変更することができないため、以下のようにImageを継承したクラスを作成することで対応しました。

    public class FantScalingImage : System.Windows.Controls.Image
    {
        protected override void OnRender(System.Windows.Media.DrawingContext dc)
        {
            this.VisualBitmapScalingMode = System.Windows.Media.BitmapScalingMode.Fant;
            base.OnRender(dc);
        }
    }
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?