タイトル : Re^5: 塗りつぶし(黒)の円をPC画面中央に配置する 投稿日 : 2015/04/14(Tue) 10:57 投稿者 : 魔界の仮面弁士
もし、画面サイズに忠実となるよう長さ補正をしたいのであれば、 たとえば 500 px の直線を描画しておき、その直線がモニタ上で どのくらいの長さに見えるのかを定規ではかってもらい、それを 基準値して入力してもらう必要があると思います。 これにより、dpi (物理1インチあたりのドット数) や px/cm (物理1センチあたりのドット数)の正確な値が手に入ります。 たとえば、500px の直線が 13.3cm で表示されれば、 500px÷13.3cm≒ 37.59px/cm (95.49dpi) という感じで。 そこまで厳密な値を求めているわけでは無いのであれば、 DpiX や DpiY プロパティ(論理1インチあたりのドット数)を 基準にするだけでも良いでしょうけれどね。 > > decPC_Yoko = 255 '横方向の画面の大きさ* > > > decHaba = (Me.Size.Width * 2.54 * 10) / (gr.DpiX * decPC_Yoko) > ⇒decPC_Yokoは画面の横方向の大きさで単位は「o」です。 今回、Graphics.PageUnit を使って単位系を変更したいのですよね。 ご存知の通り、GraphicsUnit.Millimeter で描画するためには、 描画時にミリメートル単位系の値を指定しなければなりません。 では、今回の計算に使った (Me.Size.Width * 2.54 * 10) / (gr.DpiX * decPC_Yoko) の単位系を考えてみます。 この式の『単位』のみを抜き出していくと、decPC_Yokoが「mm」なので (px × cm/inch × mm/cm)÷(px/inch × mm) になりますね。 求めた decHaba をどのように使っているのか分かりませんが、 割り算部分で単位を打ち消していくと、演算結果が mm ではなく 「単位なし」になってしまうわけですが、本当にそれで良いのでしょうか? > ⇒Graphics の ClipBoundsの使い方がよく分からないのでもう一度ご教示お願い出来ますでしょうか? Graphics の ClipBounds プロパティは、描画キャンバスのクリッピング領域(に外接する矩形)を表します。 …という説明では意味が分かりにくいと思いますが、要は、Form の Paint イベントにおける e.Graphics.ClipBounds は、その Form の ClientSize と同じ情報を返すという事です。 ただし、ClientSize は常にピクセル単位系で結果が返されるのに対し、 ClipBounds の場合は、Graphics で用いている座標系および単位系が使われるため、 単位変換を行いやすいということです。(先の私のサンプルでも使っています) もちろん、ClientSize から求めても良いですけれどね。 |