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

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

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

Re[3]: Fontサイズの丸めについて


(過去ログ 118 を表示中)

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

■69191 / inTopicNo.1)  Fontサイズの丸めについて
  
□投稿者/ むぅ (13回)-(2013/12/09(Mon) 16:02:08)

分類:[C#] 

2013/12/09(Mon) 16:07:06 編集(投稿者)

Window7 or XP VS2010 C# .Net3.5

お世話になります。
Fontダイアログで10ポイント指定した場合、9.75ptに丸められます。
Fontダイアログが適切に表示できるフォントサイズに自動変換する仕様
のようなのですが。

ファイルを読こんでオブジェクトを構築する時、同じようにフォントサイズの
丸め処理を行いたいですが、方法はありますでしょうか。
 ※保存値が10なら丸めて9.75でフォントを構築。

既存アプリで保存したものと互換性維持のため、上記の処理が必要となっています。

以上、よろしくお願いしますm(__)m
引用返信 編集キー/
■69192 / inTopicNo.2)  Re[1]: Fontサイズの丸めについて
□投稿者/ しま (53回)-(2013/12/09(Mon) 16:40:53)
No69191 (むぅ さん) に返信
> 2013/12/09(Mon) 16:07:06 編集(投稿者)
>
> Window7 or XP VS2010 C# .Net3.5
>
> お世話になります。
> Fontダイアログで10ポイント指定した場合、9.75ptに丸められます。
> Fontダイアログが適切に表示できるフォントサイズに自動変換する仕様
> のようなのですが。
>
> ファイルを読こんでオブジェクトを構築する時、同じようにフォントサイズの
> 丸め処理を行いたいですが、方法はありますでしょうか。
>  ※保存値が10なら丸めて9.75でフォントを構築。
>

日常使う用語としては 10 -> 9.75 のような場合に「丸め」とは言わないような気がします
切上げ、切捨て、四捨五入などのように指定桁以降を0にすることを「丸め」というのだと信じていたから少し妙な気がするのです

フォント 10pt 9.75pt で Google に訊いてみたら以下のページが引っかかりました。参考になれば幸いです。
http://d.hatena.ne.jp/iltc/20060724/1153702050
http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/85e68ec5-889a-4702-8a9b-45ea3f128548/labelwidth
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43079&forum=7
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=15808
引用返信 編集キー/
■69193 / inTopicNo.3)  Re[1]: Fontサイズの丸めについて
□投稿者/ 魔界の仮面弁士 (454回)-(2013/12/09(Mon) 16:57:38)
No69191 (むぅ さん) に返信
> Fontダイアログで10ポイント指定した場合、9.75ptに丸められます。

おそらくは、72ポイント=1 論理インチだからだと思います。

すなわち OS 側が 96dpi の場合、1 ドット当たりの最小単位が、
 72ポイント÷96dpi=0.75ポイント
になるという事情です。具体的には、
  7pt => 6.75
  8pt => 8.25
  9pt => 9
 10pt => 9.75
 11pt => 11.25
 12pt => 12
 13pt => 12.75
になるという。


private void fontDialog1_Apply(object sender, EventArgs e)
{
  this.textBox1.Text = this.fontDialog1.Font.SizeInPoints.ToString();
}

private void button1_Click(object sender, EventArgs e)
{
  this.fontDialog1.ShowApply = true;
  this.fontDialog1.ShowDialog();
}


現在の DPI 値は、こんな感じで求められそうです。

PointF dpi;
using (Graphics g = this.CreateGraphics())
{
  dpi = new PointF(g.DpiX, g.DpiY);
}
引用返信 編集キー/
■69194 / inTopicNo.4)  Re[1]: Fontサイズの丸めについて
□投稿者/ shu (447回)-(2013/12/09(Mon) 17:14:02)
No69191 (むぅ さん) に返信

最適な方法ではありませんが
こんな感じで求めるとよいかと思います。
SrcSizeが10ptに相当するサイズでDesSizeが求めたいサイズになります。
理由は既出の通り1pixel辺りのpt数の倍数(小数に対しこの表現でよいかわかりませんが)の内
一番近い値となるからです。

			int PtPerIn = 72;
			int DtPerIn;
			Single DesSize;

			using (var g = this.CreateGraphics())
			{
				DtPerIn = (int)g.DpiX;
			}
			Single SrcSize = Single.Parse(textBox1.Text);
			int TempSize1 = (int)(SrcSize * DtPerIn);
			int TempSize2 = TempSize1 + PtPerIn;
			TempSize1 = (TempSize1 / PtPerIn) * PtPerIn;
			Single DesSize1 = (Single)TempSize1 / (Single)DtPerIn;
			TempSize2 = (TempSize2 / PtPerIn) * PtPerIn;
			Single DesSize2 = (Single)TempSize2 / (Single)DtPerIn;
			if ((SrcSize -DesSize1) < (DesSize2 - SrcSize))
				DesSize = DesSize1;
			else
				DesSize = DesSize2;

引用返信 編集キー/
■69195 / inTopicNo.5)  Re[2]: Fontサイズの丸めについて
□投稿者/ むぅ (14回)-(2013/12/09(Mon) 17:40:09)
2013/12/09(Mon) 17:42:39 編集(投稿者)

魔界の仮面弁士さま、しまさま

お世話になります。
72ポイント=1 論理インチに起因するということは私もいくつかのHPで読んで
認識しております。


既存アプリではデータファイルにフォントサイズを保存しております。
このデータファイル読み込み時にサイズを変換して画面に表示しているようです。
例:ファイル保存は10pt、画面表示時は9.75pt

作成しているアプリでも同様の動きを実現する必要があり、この変換をコーディングで実現
したいのです。

・ファイル読み込み(フォントサイズ=10pt)
・フォントサイズ変換(10pt→9.75pt) これを実現したい。
・フォント構築表示(9.75pt)



魔界の仮面弁士さま
「画面のDPI値は通常96DPI」というような記載をどこかで見ましたが、この値は変更できる
ものでしたでしょうか。いまさらながらの質問なのかもですが。


以上、よろしくお願いします。

引用返信 編集キー/
■69196 / inTopicNo.6)  Re[3]: Fontサイズの丸めについて
□投稿者/ shu (448回)-(2013/12/09(Mon) 17:49:16)
No69195 (むぅ さん) に返信

> 「画面のDPI値は通常96DPI」というような記載をどこかで見ましたが、この値は変更できる
> ものでしたでしょうか。いまさらながらの質問なのかもですが。

DPIは96で設定されていることが通常ですが
コントロールパネル - デスクトップのカスタマイズ - テキストやその他の項目の大きさの変更
の中で変更することが出来ます。

72は1インチ = 72ptの72であるので変更は出来ないです。
引用返信 編集キー/
■69197 / inTopicNo.7)  Re[2]: Fontサイズの丸めについて
□投稿者/ むぅ (15回)-(2013/12/09(Mon) 17:55:51)
2013/12/09(Mon) 17:56:06 編集(投稿者)

shu さま
ご提示いただきましたコードで、フォントダイアログで変更される値と同じ数値
が得られるようです。大変助かりました。ありがとうございましたm(__)m

魔界の仮面弁士さま
ご回答、ありがとうございます。
ここが変更されている場合はまた考慮が必要なんですね。
教えていただきましたコードも参考に検討します。

どうもありがとうございましたm(__)m

解決済み
引用返信 編集キー/
■69198 / inTopicNo.8)  Re[2]: Fontサイズの丸めについて
□投稿者/ 魔界の仮面弁士 (455回)-(2013/12/09(Mon) 17:58:36)
# 本題とは関係のないところに反応。

No69192 (しま さん) に返信
> 日常使う用語としては 10 -> 9.75 のような場合に「丸め」とは言わないような気がします
たとえば、
 「
  時速100キロメートルをマイル単位で『丸め』ると時速62マイルなので、
  時速99.779キロメートル相当の値で計算されてしまった
 」
という表現は許容できそうですが、同じ内容を
 「
  時速100kmを指定したが、計算時は(マイル単位の)99.779kmに『丸め』られてしまった
 」
という表現にすると、ちょっと不自然な印象を受けますね。


> 指定桁以降を0にすることを「丸め」というのだと信じていたから
「0.75pt/dot を 1 単位とした単位系」における整数倍、という意味では
一応整数丸めではありますね。
引用返信 編集キー/
■69199 / inTopicNo.9)  Re[3]: Fontサイズの丸めについて
□投稿者/ むぅ (16回)-(2013/12/09(Mon) 18:18:44)
魔界の仮面弁士 さま

他人のせいにしたいわけではないですが、
参考に調べていたサイトで「丸め」と表記しており、
書いてあることは理解できたので、あまり表現には
気がまわらず、そのまま引用しておりました。

こういう掲示板で質問する際は、やはり表現に気を
配るべきですね。あらぬ誤解を招いたり、脇道にそ
れたりしますしね。

気を付けているつもりでしたがあわてて書くとこんなことに
・・・(^^;。

ありがとうございました m(__)m
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -