13

私は小さなログインダイアログを書いていますが、美的理由からダイアログの上部にバナーを埋め込んでいます。デフォルトでは、WPFアンチエイリアスによって画像全体がエイリアス化され、画像に含まれるテキストがぼやけてしまうことを除けば、すべてうまくいきました。

少し検索した後、結果の最初の数ページは、アンチエイリアシングをWPFで無効にできないというのが一般的な信念であることを示しました。誰かがこれを確認するか、そうでなければこれを否定することができますか?

これは私にとっては小さな問題です。画像からテキストを取り出し、代わりに同じ効果を実現するために同じテキストのラベルを背景画像の上に重ねます(認める必要がありますが、少し面倒です)。

ありがとう、ロブ

4

2 に答える 2

17

私の知る限り、ビットマップをスケーリングするとき、WPF は常にアンチエイリアシングを行います。ただし、ビットマップのスケーリングを回避することで、目標を達成できるはずです。

次の 2 つの手順があります。

  1. SnapsToDevicePixels="true"あなたのイメージに設定
  2. 画像に ScaleTransform を設定して、1 デバイス ピクセル = 1 ビットマップ ピクセルになるようにスケーリングします。

必要な ScaleTransform を計算するには、次のように画面の DPI を計算します。

var DPI = Win32Functions.GetSystemMetrics(SM_CYICON) / SystemParameters.IconHeight * 96;

ビットマップの場合は、次のようにします。

var scale = bitmapDPI / DPI;
var transform = new ScaleTransform(scale, scale);

これにより、ビットマップのピクセルがデバイスのピクセルと正確に一致します。WPF はビットマップを引き伸ばさないので、アンチエイリアスはありません。

高 DPI 画面で画像を引き伸ばしたいが、アンチエイリアシングなしで行う場合 (たとえば、すべてのピクセルを 2 倍にする)、好きなアルゴリズムを使用して独自のコードでビットマップを引き伸ばし、引き伸ばされたビットマップで上記を使用します。

于 2009-11-16T06:32:14.760 に答える
4

それは実際にはアンチエイリアシングではありません-問題を引き起こしているのはサブピクセルの配置です、私はそれについて(そして問題を解決するコントロールについて)私のブログに書いています:

http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-wpf.aspx

于 2009-11-16T08:43:10.183 に答える