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

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

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

Re[2]: Fontサイズの取得方法


(過去ログ 91 を表示中)

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

■54540 / inTopicNo.1)  Fontサイズの取得方法
  
□投稿者/ 佐藤 (3回)-(2010/10/25(Mon) 20:26:51)

分類:[C#] 

お世話になります。
開発環境はVS2008 C#です。

文字列のデータ(例:佐藤 太郎)から100(幅)X466(高さ)のビットマップデータを
作るロジックを作成しています。
そこで文字列のデータが100(幅)X466(高さ)の枠に収まるフォントサイズ(デフォルト48pt)
を取得する方法がわかりません。

どなたかご教示お願いします。

引用返信 編集キー/
■54543 / inTopicNo.2)  Re[1]: Fontサイズの取得方法
□投稿者/ 魔界の仮面弁士 (1890回)-(2010/10/25(Mon) 23:13:41)
No54540 (佐藤 さん) に返信
> そこで文字列のデータが100(幅)X466(高さ)の枠に収まるフォントサイズ(デフォルト48pt)
> を取得する方法がわかりません。

TextRenderer.MeasureText なり、Graphics.MeasureString なりで測定してみて、
大きすぎたらフォントを下げて再測定…という事を繰り返せば取得できるかと思います。
http://dobon.net/vb/dotnet/graphics/measurestring.html
引用返信 編集キー/
■54546 / inTopicNo.3)  Re[1]: Fontサイズの取得方法
□投稿者/ shu (122回)-(2010/10/26(Tue) 08:08:13)
2010/10/26(Tue) 09:48:43 編集(投稿者)

No54540 (佐藤 さん) に返信
> お世話になります。
> 開発環境はVS2008 C#です。
>
> 文字列のデータ(例:佐藤 太郎)から100(幅)X466(高さ)のビットマップデータを
> 作るロジックを作成しています。
> そこで文字列のデータが100(幅)X466(高さ)の枠に収まるフォントサイズ(デフォルト48pt)
> を取得する方法がわかりません。
>
> どなたかご教示お願いします。
>
描画するときのdpiにより変わってきます。
1pt= 1/72inchなので
例えば300dpiなら1pt = 300/72=4.16(pixel)となります。
  100(pixel) = 100/4.16pt ≒ 25pt
=> 1文字なら25pt, 2文字なら12.5ptとなります。
横と縦のポイントのうち小さい方をもとにして魔界の仮面弁士さんのコメを参考にしてください。

引用返信 編集キー/
■54552 / inTopicNo.4)  Re[2]: Fontサイズの取得方法
□投稿者/ 佐藤 (4回)-(2010/10/26(Tue) 11:12:34)
No54543 (魔界の仮面弁士 さん) に返信
> ■No54540 (佐藤 さん) に返信
>>そこで文字列のデータが100(幅)X466(高さ)の枠に収まるフォントサイズ(デフォルト48pt)
>>を取得する方法がわかりません。
>
> TextRenderer.MeasureText なり、Graphics.MeasureString なりで測定してみて、
> 大きすぎたらフォントを下げて再測定…という事を繰り返せば取得できるかと思います。
> http://dobon.net/vb/dotnet/graphics/measurestring.html

ご返答ありがとうございます。
TextRenderer.MeasureText を使用しようと思いますがサイズの判定基準としましては、
計測した縦及び幅が基準値ないならOK、基準値外なら再度繰り返しとすればいいのでしょうか?

引用返信 編集キー/
■54553 / inTopicNo.5)  Re[2]: Fontサイズの取得方法
□投稿者/ 佐藤 (5回)-(2010/10/26(Tue) 11:14:13)
No54546 (shu さん) に返信
> 2010/10/26(Tue) 09:48:43 編集(投稿者)
>
> ■No54540 (佐藤 さん) に返信
>>お世話になります。
>>開発環境はVS2008 C#です。
>>
>>文字列のデータ(例:佐藤 太郎)から100(幅)X466(高さ)のビットマップデータを
>>作るロジックを作成しています。
>>そこで文字列のデータが100(幅)X466(高さ)の枠に収まるフォントサイズ(デフォルト48pt)
>>を取得する方法がわかりません。
>>
>>どなたかご教示お願いします。
>>
> 描画するときのdpiにより変わってきます。
> 1pt= 1/72inchなので
> 例えば300dpiなら1pt = 300/72=4.16(pixel)となります。
>   100(pixel) = 100/4.16pt ≒ 25pt
> => 1文字なら25pt, 2文字なら12.5ptとなります。
> 横と縦のポイントのうち小さい方をもとにして魔界の仮面弁士さんのコメを参考にしてください。
>

ご回答ありがとうございます。
魔界の仮面弁士さんのコメのサイト参考にやってみたいと思います。
ピクセルとポイントの扱い方が非常によくわりました。

引用返信 編集キー/
■54557 / inTopicNo.6)  Re[3]: Fontサイズの取得方法
□投稿者/ 魔界の仮面弁士 (1891回)-(2010/10/26(Tue) 12:08:20)
No54552 (佐藤 さん) に返信
> TextRenderer.MeasureText を使用しようと思いますがサイズの判定基準としましては、
> 計測した縦及び幅が基準値ないならOK、基準値外なら再度繰り返しとすればいいのでしょうか?

考え方としてはそれで良いと思います。なお、GDI 系の描画と GDI+ 系の描画では、
多少の違いがありますので、測定方法も異なってくることに注意してください。

また、領域いっぱいに描画されるフォントサイズを知りたい場合は、フォントサイズを
少しずつ変えながら、どのサイズまでならば収まり、どこから超えてしまうかを
判断する事になるでしょう。
フォントサイズを、1pt ずつ変更するのか、0.1pt ずつ変更するのかは実装次第ですが。


また、shu さんが既に回答されていますが、画面の dpi 値などを基にして、
ある程度の基準サイズを予想することもできます。ただし、あくまでも
参考値なので、フォントによってはやはり測定が必要になるはずです。

たとえば、Times New Roman の 72pt フォントで「fffff」と描画した場合、
それぞれの隣り合う f の文字が、文字間隔が少し重なるように配置されますので、
一文字あたりのフォントサイズだけでは、文字列全体の幅は単純には得られません。


文字の描画について、下記も参照してみてください。
http://msdn.microsoft.com/ja-jp/library/dd297679.aspx
引用返信 編集キー/
■54569 / inTopicNo.7)  Re[4]: Fontサイズの取得方法
□投稿者/ 佐藤 (6回)-(2010/10/26(Tue) 18:04:57)
No54557 (魔界の仮面弁士 さん) に返信
> ■No54552 (佐藤 さん) に返信
>>TextRenderer.MeasureText を使用しようと思いますがサイズの判定基準としましては、
>>計測した縦及び幅が基準値ないならOK、基準値外なら再度繰り返しとすればいいのでしょうか?
>
> 考え方としてはそれで良いと思います。なお、GDI 系の描画と GDI+ 系の描画では、
> 多少の違いがありますので、測定方法も異なってくることに注意してください。
>
> また、領域いっぱいに描画されるフォントサイズを知りたい場合は、フォントサイズを
> 少しずつ変えながら、どのサイズまでならば収まり、どこから超えてしまうかを
> 判断する事になるでしょう。
> フォントサイズを、1pt ずつ変更するのか、0.1pt ずつ変更するのかは実装次第ですが。
>
>
枠内に収まるようフォントサイズを1ptずつ変更し、対応できました。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -