2009-04-30 13 views

答えて

17

この理由は、アンチエイリアスシステムが物理デバイスのピクセルと整列していない場合、複数のピクセルにラインを広げるアンチエイリアスシステムです。

WPFは独立しています。つまり、ピクセル単位ではなく、インチ単位でユーザーインターフェイス要素のサイズを指定します。 WPFの論理単位は1/96インチです。ほとんどのスクリーンは96dpiの解像度を持つため、このスケールが選択されます。したがって、ほとんどの場合、1論理ユニットが1物理ピクセルに一致します。しかし、画面解像度が変更された場合、このルールはもはや有効ではありません。

すべてのWPFコントロールは、プロパティSnapsToDevicePixelsを提供します。 trueに設定すると、コントロールはすべてのエッジが物理的なデバイスのピクセル上に有効に描画されるようにします。しかし残念ながら、この機能はコントロールレベルでしか利用できません。

出典:Draw lines excactly on physical device pixels

+0

SnapToDevicePixelsプロパティは、テキストグリフには影響しません。 TextBlockでこれを試して、私の言いたいことを見てください。残念ながら、私たちは今のところぼやけたテキストで立ち往生しています。 –

+1

ぼんやりしたフォントについては、こちらをご覧ください:http://stackoverflow.com/questions/190344/wpf-blurry-fonts-problem-solutions – Spoike

2

クイックフィックス:

があなたのぼやけコントロールにルートからすべてのコンテナにこれらのオプションを使用し

 UseLayoutRounding="True" 
     RenderOptions.BitmapScalingMode="NearestNeighbor" 
     SnapsToDevicePixels="True" 
     RenderOptions.ClearTypeHint="Enabled" 

説明:

UseLayoutRounding =真サブピクセルレイアウトの問題を修正。それらはしばしば発生する。エフェクトは、コントロールをピクセル間のものにリサイズします。

RenderOptions.BitmapScalingMode = NearestNeighborは、ビットマップのぼかしサンプリングを修正します。ビットマップは、エフェクトやその他のテクニックを使用するときに使用されます。それらがコンテナまたはコントロールに再適用されると、それらはピクセル間で終わる可能性があり、したがってビットマップのピクセルを補間することがあります。

SnapsToDevicePixels = "TRUE"修正垂直および水平ポリゴン、ラインや矩形はテキストに再び有効にClearTypeの "有効" ピクセル

RenderOptions.ClearTypeHint =わたってるしきレンダリングされます。エフェクトやレンダラーがテキストの正確な背景を知らない場合は、非常に簡単に無効になります。

コンテナごとに使用する必要があります。データテンプレートによって、これらのオプションはサブコントロールのデフォルト設定に戻されます。

+1

追加:4Kスクリーンまたは他の機会に視覚的な問題に遭遇する可能性があります。例えば、テキストが真ん中で聴かれたり、一部のピクセルが完全に欠落している場合、1ピクセルライン全体が見えなくなることがあります。これらの問題を解決するには、追加の技術が必要です。 – ecreif

関連する問題