12

WPF で画像がぼやけるのを防ぐ方法を探しています。アプリケーションを高 DPI ディスプレイで見栄えよくしたいので、アイコンを 96x96px で作成し、サイズ 32x32 で表示しました。

google には多くの情報があり、stackoverflow にもこれに関するトピックがいくつかあります。要約すると、プロパティUseLayoutRoundingを有効にしてに設定RenderOptions.BitmapScalingModeHighQualityます。残念ながら、これは私にはうまくいきません。画像はまだ非常にぼやけて見えます。次に、より高い DPI aaaand - WOW を備えたラップトップでアプリケーションをテストしました。画像は全体的にシャープでいいです。

私の唯一の解決策は、ImageSource を System.Drawing.Bitmap に変換するカスタム コントロールを作成し、そこでイメージの寸法に合わせて再スケーリングし、WPF ImageSource に変換することでした。明らかに完璧な解決策ではありません!

低 DPI ディスプレイ (96dpi) での例 高 DPI ディスプレイ (~122dpi) の例

問題は、低 dpi ディスプレイで画像がぼやけて見えるのはなぜですか? 何が原因なのかわかりませんが、誰かがこれを修正するアイデアを持っていることを願っています.

私が見つけた最も有用なリソースのいくつかを次に示します。

  1. http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx
  2. http://www.nbdtech.com/Blog/archive/2008/11/20/blurred-images-in-wpf.aspx
  3. http://www.hanselman.com/blog/BeAwareOfDPIWithImagePNGsInWPFImagesScaleWe​​irdOrAreBlurry.aspx
  4. WPF イメージでアンチエイリアシングを無効にする

編集:

ここで要求されているのは、ImageSource を変換するためのコードです。含まれていないメソッド呼び出しがいくつかありますが、Google を介して非常に高速に見つけることができます。

// Calculate the conversion factor.
float dpi = WpfImageHelper.GetCurrentDPI(this);
float factor = dpi / 96f;
int width = (int)Math.Round(this.image.ActualWidth * factor);
int height = (int)Math.Round(this.image.ActualHeight * factor);

// Create bitmaps.
Bitmap oldBitmap = WpfImageHelper.ToWinFormsBitmap2((BitmapSource)this.Source);
Bitmap newBitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

// Draw the new bitmap. Use high-quality interpolation mode.
using (Graphics g = Graphics.FromImage(newBitmap))
{
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    g.Clear(System.Drawing.Color.Transparent);
    g.DrawImage(oldBitmap, 0, 0, newBitmap.Width, newBitmap.Height);
}

// Set the image source to the resized bitmap.
this.Source = WpfImageHelper.ToWpfBitmap2(newBitmap); 
4

2 に答える 2

3

あなたのアイコンはビットマップなので、この問題を解決するつもりはありません。別の解決策を探す必要があります。アイコンをデバイスに依存しないようにするため、画像をベクターに変換するか、画像を xaml に変換する必要があります。この質問は以前に尋ねられて回答されており、解決にはそれほど労力はかかりません。

画像からベクターを作成

convert-svg-to-xaml

于 2014-04-28T10:23:11.717 に答える
0

この投稿(VirtualDub の尊敬される作成者による) によると、WPF の高品質な "ファント" メソッドは実際にはそれほど優れていません。カスタム コントロールは優れた双三次法を使用します。

リサンプリングの主題はかなり深いものです。品質のダウンスケーリングに関する質問に対するOld Proの回答のリンク、特にこのリンクを参照してください。

于 2015-07-16T03:50:03.983 に答える