2016-04-01 7 views
0

言い換え質問:私は、Visual Studio内からユニットテストからのビットマップを描画するときGDI +フォントサイズ差

、私は私のデスクトップ上に持ってズーム倍率を考慮したが、私コンソールから実行することはできません。

Graphics.DrawStringを使用してレンダリングされたテキストをデスクトップ設定に関係なく一貫して動作させるにはどうすればよいですか?


私はGDI +を使用してビットマップを作成し、正しい画像が生成されていることを確認するために事前に保存されたために、画像を、それらを比較して、いくつかのNUnitのテストを持っています。

私の問題は、Visual Studio内からテストを実行したときに、(コマンドラインビルドスクリプトでテストを実行したときに生成されるものと比較して)(Graphics.DrawStringで表示される)テキストが異なることですランナー)。

注:1ピクセルオフやテキストラッピングの問題はありません。コンソールから実行中に表示されるテキストのフォントサイズは小さくなります。

誰かが、実行環境によってフォントサイズが同じマシンと異なるのはなぜ知っていますか?同様に重要なこと:私はそれについて何ができますか?

+0

関連部分( 'Graphics'を取得する場所、' DrawString'などを使用する方法)を表示できますか? – Sinatr

答えて

1

コンソールモードのアプリケーションはほとんど決して宣言されていませんdpiAware。ビットマップを作成するときは、ビデオアダプタの動作に関係なく、デフォルトのHorizo​​ntal/VerticalResolutionプロパティは96ピクセル/インチになります。 DPIの仮想化機能がそれを処理します。フォントのサイズは、デフォルトではポイント単位で指定されているため、フォントに使用されるピクセル数に影響します。 1ポイントは1/72インチです。たとえば、9ポイントのフォントを描くために必要なピクセルの数は、ピクセル/インチの比率に依存します。 9/72 * 96 = 12ピクセルになります。

たとえば、144 dpiのビデオアダプタで動作するdpiAwareプログラムでは、同じテキストが9/72 * 144 = 18ピクセル高くなります。コンソールモードのアプリケーションがテキストを小さくしすぎていると結論づけます。または、dpiAwareアプリはあなたの視点に応じて大きすぎます。

DPIの認識または仮想化は、一般的に重要なので、プログラムが高解像度のモニタで判読不能なテキストを作成するのを防ぎます。 4Kモニターでは、12ピクセルの高テキストが見えますが、ちりのように見えます。これは、ビットマップを作成するコンソールモードのアプリケーションでは正確には適用されません。はるかに大きなビットマップを作成することを検討するかもしれません。あなたがそうでないなら、小さなビットマップは、4Kモニターと一致するように再スケーリングされなければならないとき、とても良く見えません。特にテキストでは目立つように、アンチエイリアスピクセルは、もはやアンチエイリアスにならない岩に変わります。

ピクセル単位のサイズしか気にしない場合は、GraphicsUnitを受け取るFontコンストラクタの1つを使用してこの問題を回避することを検討する必要があります。あなたはデフォルトの代わりにGraphicsUnit.Pixelを好むでしょう。ビデオアダプタの設定に関係なく、ビットマップの全体の高さの固定割合であるピクセルの予測可能なテキストの高さは、になります。

+0

私は質問を投稿した後に私のコルージュに語った。ハンス・パッセントはこれを数分後に説明します。 :-) #ヒーロー –