C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: フォントダイアログのフォントサイズの端数


(過去ログ 122 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■72991 / inTopicNo.1)  フォントダイアログのフォントサイズの端数
  
□投稿者/ pod (12回)-(2014/08/07(Thu) 18:53:31)

分類:[C#] 

C#で標準のフォントダイアログ(FontDialog)ではなく、独自にフォントダイアログと同様の機能を持つダイアログを作ろうとしています。
必要なのはフォント名・選択可能なスタイル・フォントサイズの3つで、

FontFamily[] ffs = FontFamily.Families;

のように取得し、フォント名はNameで問題なく取得出来ました。

次にスタイルですが、FontStyle.IsStyleAvailable()で取得しようとしました。
標準ダイアログではフォントによっては「細字」「やや狭い」「極太」などの特殊なスタイルが選べますが
FontStyleにはない要素で、どのように取得すればいいかよくわかりません。

サイズに関しても、標準のダイアログで「8」を選択しても実際には「8.25」が取得され、「20」を選択すると「20.25」がfloatで取得されます。
また、数字も連続ではなく「28, 36, 48, 72」のように飛んでいます。
インチをディスプレイのdpiに合わせる都合だと思うのですがあのサイズはどのような計算で導き出されているのでしょうか?
引用返信 編集キー/
■73010 / inTopicNo.2)  Re[1]: フォントダイアログのフォントサイズの端数
□投稿者/ shu (608回)-(2014/08/11(Mon) 09:40:06)
No72991 (pod さん) に返信

(1)標準モニター解像度(Windows) 96dpi
(2)1pt = 1/72in

なので
(2)より1in = 72pt

(1)より96dot = 72pt
1dot = 72/96pt
1dot = 0.75pt

となるのでモニター上できっちりと計算出来るptは
0.75の整数倍で求めらるポイントになります。

つまり8ptを指定したときは一番近い
11 * 0.75 = 8.25ptになります。
20ptの場合は
27 * 0.75 = 20.25ptになります。

引用返信 編集キー/
■73027 / inTopicNo.3)  Re[2]: フォントダイアログのフォントサイズの端数
□投稿者/ pod (15回)-(2014/08/12(Tue) 10:38:52)
No73010 (shu さん) に返信
> つまり8ptを指定したときは一番近い
> 11 * 0.75 = 8.25ptになります。
> 20ptの場合は
> 27 * 0.75 = 20.25ptになります。

回答ありがとうございます。
ポイントが72dpi基準でディスプレイが96dpi基準なんですね。
次のような式で算出することにしました。

(float)(Math.Round(pt * (96f / 72f)) / (96f * 72f))

解決済み
引用返信 編集キー/
■73029 / inTopicNo.4)  Re[3]: フォントダイアログのフォントサイズの端数
□投稿者/ shu (609回)-(2014/08/12(Tue) 11:10:21)
No73027 (pod さん) に返信

念の為

> 回答ありがとうございます。
> ポイントが72dpi基準で
>
1pt = 1/72inch は ptの定義です。
変わるものではありません。
1a = 100m^2
みたいなもの。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -