ママのスキンケアのお悩みにおすすめアイテム

C#で開発をしています。

指定した高さに最も近い高さをもつフォントサイズを取得したいのですが現在

int fontsize = 1;
float height = 90;
Font myFont = new Font("MS UI Gothic", fontsize );


//高さ90に近いフォントサイズを取得
while(myFont.GetHeight(e.Graphics) < height)
{
myFont = new Font("MS UI Gothic", fontsize );
fontsize += 0.001f;
}

とつくり的にはこんな感じでとれることはとれたのですが
もっとスマートな方法、簡単な方法はないのでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

指定した高さ (単位:Pixel) のフォントが使いたいわけではなく,


指定した行間 (単位:Pixel) のフォントが使いたいのですね。

前者であれば,コンストラクタで GraphicsUnit.Pixel を指定するだけの話なのですが,
後者の場合,FontFamily オブジェクトを作り,GetLineSpacing メソッドと GetEmHeight メソッドから計算して Font を生成することになります。

var style = FontStyle.Regular;
var requestHeight = 90.0f;
var fontFamily = new FontFamily("MS UI Gothic");
var fontSize = requestHeight * fontFamily.GetEmHeight(style) / fontFamily.GetLineSpacing(style);
var font = new Font(fontFamily, fontSize, GraphicsUnit.Pixel);

References)
MSDN: Font コンストラクター (String, Single, GraphicsUnit)
http://msdn.microsoft.com/ja-jp/library/fza59xh0 …
MSDN: GraphicsUnit 列挙体
http://msdn.microsoft.com/ja-jp/library/system.d …
MSDN: GetLineSpacing メソッド
http://msdn.microsoft.com/ja-jp/library/system.d …
MSDN: GetEmHeight メソッド
http://msdn.microsoft.com/ja-jp/library/system.d …
    • good
    • 0
この回答へのお礼

なるほど・・
ありがとうございました。

お礼日時:2011/11/17 08:08

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC#でほかのファイルにある自作クラスを使用したい場合

最近Javaから移ってきたばかりのC#初心者です。
依然作ったことのあるほかのファイルにある自作クラスを
新しいファイルの自作クラスで使用したい場合、どうすれば
よいのでしょうか。
Form1.cs(8,7): error CS0246: 型または名前空間名 'Calc1' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
Form1.cs(12,19): error CS0246: 型または名前空間名 'Calc' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
上記のようなエラーが発生してしまいます。
なにとぞご助力をお願いいたします。

Aベストアンサー

#2>しかし、やはりうまくいきませんでした。
#1で言われているような、namespace, using 指定と参照設定でうまくいくと思うんですけど・

自作クラスを補足することはできますか?

QC#(.net) ドロー系ソフト作成 図形選択方法

C#(.net framework 4.0)で現在業務に使用しているソフトで、地図画像に対して、ごく初歩的な図形(直線や矢印、円、四角形、文字程度)を挿入する事が必要になりそうでして、ドローソフト系のようなプログラミングを行いたいと思っています。(Excel上での図形挿入の様なイメージ)

Graphicsを使用して、線や塗りなどの描画はすぐにできると思うのですが、一度描画した線や四角を移動させたり大きさを調整したりするために、対象の図形をマウスでクリックして選択する方法がまるでうかびません。通常、この「図形を選択する」というのはどのように実現させているのでしょうか?思いつくものとしては、

図形をコントロールとして扱い、マウスイベントを直接受け取れるようにする?
(そもそもコントロールの使い方として間違っているような気がしますし、パフォーマンスにかなりの悪影響がありそう…)

別に座標マップを作り、どの図形がどのドットに対応しているかを記録する?
(線を引いた結果、どの座標がどの図形かをすべて計算する必要があると、かなりの計算とコード量になりそう…)

くらいです。基本的な、もしくは一般的な方法や考え方がありましたら是非教えてください。ペイント系ならそれなりにネット上に情報はあるような気もするのですが、ドロー系に関する情報はなかなか少ないようで困っています。ドロー系ソフト作成時に参考になるコードや情報や本などありましたら、そちらも教えていただけると助かります。よろしくお願いいたします。

P.S. 質問投稿時にさんざん迷ったのですが、C#(.Net Framework)のカテゴリーって、こちらの C・C++ でよろしかったんでしょうかw

C#(.net framework 4.0)で現在業務に使用しているソフトで、地図画像に対して、ごく初歩的な図形(直線や矢印、円、四角形、文字程度)を挿入する事が必要になりそうでして、ドローソフト系のようなプログラミングを行いたいと思っています。(Excel上での図形挿入の様なイメージ)

Graphicsを使用して、線や塗りなどの描画はすぐにできると思うのですが、一度描画した線や四角を移動させたり大きさを調整したりするために、対象の図形をマウスでクリックして選択する方法がまるでうかびません。通常、この「図形を...続きを読む

Aベストアンサー

図形をコントロール(ウィンドウ)や、それを囲む矩形で判断すると、重なった部分に問題が出ます。
例えば、線分を描いたあとでその線分を囲むような円を描いた場合、円の方が(Z-orderで)上にある状態だと後ろにある線分を選択することができなくなります。
ソフトによっては、「前面に移動」、「背面に移動」といったコマンドを用意して回避している場合もあります。

クリックした点と図形の距離を計算し、範囲内で最も距離が近い図形を選択するようにしてはいかがでしょうか。
線分の場合の距離は、クリックした点から線分に垂線を引き、交点とクリックした点の距離を使います。ただし、交点が線分の延長線上になる場合は、クリックした点と線分の端点の距離のうち小さい方を使います。
円・円弧の場合は、中心点とクリックした点を通る直線を作り、その直線と円との交点を使用します。円弧の場合で交点が円弧の範囲外の場合は、線分と同様に円弧の端点を使用します。
矩形の場合は、矩形を4つの線分と考えて各線分との距離のうち小さいものを使用します。

すべて数学的な計算だけで済みます。ドットとの対応とかは使いません。

図形をコントロール(ウィンドウ)や、それを囲む矩形で判断すると、重なった部分に問題が出ます。
例えば、線分を描いたあとでその線分を囲むような円を描いた場合、円の方が(Z-orderで)上にある状態だと後ろにある線分を選択することができなくなります。
ソフトによっては、「前面に移動」、「背面に移動」といったコマンドを用意して回避している場合もあります。

クリックした点と図形の距離を計算し、範囲内で最も距離が近い図形を選択するようにしてはいかがでしょうか。
線分の場合の距離は、クリックした...続きを読む


人気Q&Aランキング