Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@Nuits

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

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);
        }
    }
5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What is going on with this article?