1

私のアプリケーションの 1 つに批判があります。表示されたテキストがぼやけて認識されます。ウィンドウを少しズームして、この結果を得ました(したがって、正しいです)

ぼやけたテキスト

この単純化された例でここで試したことの結果:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <TextBlock Text="StatusDTC [1]"></TextBlock>
            <TextBlock Text="StatusDTC [2]"
                       RenderOptions.BitmapScalingMode="NearestNeighbor"
                       RenderOptions.EdgeMode="Aliased"></TextBlock>
            <TextBlock Text="StatusDTC [3]" 
                       SnapsToDevicePixels="True"></TextBlock>
            <TextBlock Text="StatusDTC [4]"
                       SnapsToDevicePixels="True"
                       RenderOptions.BitmapScalingMode="NearestNeighbor"
                       RenderOptions.EdgeMode="Aliased"></TextBlock>
        </StackPanel>
    </Grid>
</Window>

ここで似たようなものを見つけました。しかし、UseLayoutRounding は .Net 3.5 では利用できないようです。少しグーグルで検索したところ、.Net 4 (TextOptions.TextRenderingMode) でこの問題に対処する改善が行われていることがわかりましたが、このアプリケーションで .Net 4 に切り替えることはできません。

Win7 は XP とは異なる WPF をレンダリングすることを知っているので、仮想 XP も開始してそこで試してみました。結果は同じです。

誰かが.Net 3.5でテキストを鮮明にする考えを持っていますか?

4

3 に答える 3

3

ここで何でもできるビットマップフォントを使用することは間違いありません。:(BitmapScalingMode使用しているフォントがベクターベースである限り、現在の例に影響を与えるべきではありません.4.0のテキストの改善が本当に必要です.

Windows 7 では、テキスト描画が DWrite に切り替えられたため、XP とは異なります。

于 2013-02-05T07:43:00.927 に答える
2

.NET 4.0 へのアップグレードが絶対に不可能な場合、検討できる最後の (やや必死の) オプションが 1 つあります。たとえば、GDI+ を使用して必要なテキストをビットマップにレンダリングし、それを表示することができます。または、相互運用機能を使用して Windows フォーム ラベル コントロールをホストすることもできます。

これらはどちらも本当に恐ろしい解決策です (そのため、最近のバージョンの WPF を使用することは単にオプションではないことをコメントで確認した後で、これを提案しただけです)。相互運用性の問題は、すべての通常の HWND 相互運用性の問題につながります (つまり、Label は独自の HWND を取得します。これは、WPF コンテンツとは完全に別個にレンダリングされることを意味し、明らかな視覚的な不連続性につながる可能性があります)。

したがって、この状況で立ち往生している場合は、ビットマップにレンダリングするオプションを検討すると思います。GDI+ を使用してビットマップを生成し、それを WPF の Image 要素でレンダリングすることができます。また、これを行うためのカスタム コントロールを作成する準備ができていれば、(レンダリングするテキストの Text 依存関係プロパティを定義することにより) データ バインディングなどをサポートすることもできます。ただし、単純ではありません。Windows ビットマップのサポートに関しては共通点がありますが、データを GDI+ ワールドから WIC (WPF がビットマップ処理に依存する Windows Imaging Components) に転送するのは面倒です。また、アクセシビリティをサポートする必要がある場合 (たとえば、テキストをスクリーン リーダーに表示する、ニーモニック アクセス キーをサポートするなど)、これは比較的複雑な作業になります。

于 2013-02-06T10:29:58.043 に答える
1

Ameen's answer のリンクで説明されているように、この問題は主に小さなフォント サイズで見られます。

フォントサイズを大きくするオプションはありますか? これが解決策というより回避策であることは承知していますが、Framework 3.5 から離れられない場合に、ぼやけを取り除くための迅速かつ簡単な方法です。

于 2013-02-06T09:00:24.320 に答える