電子書籍の厳選無料作品が豊富!

お世話になります。
VB2005でpictureboxに線画させるプログラムの検討をしています。
拡大機能をgraphicのScaleTransformで処理しようとしたのですが、座標系だけでなく、線幅も太く、文字列も大きくなってしまいます。
座標系のみコントロールすることはできないのでしょうか。

A 回答 (2件)

座標系のスケールは変更せずに描画する図形の座標を


変更すれば線幅もフォントも変更せずにすみます

g.DrawLine(p, 10, 10, 20, 20)
   ↓
g.DrawLine(p, 10 * n, 10 * n, 20 * n, 20 * n)

拡大率が大きくなる場合には、図形要素が画面内に入る
か否かを判別して、表示対象の図形要素のみを描画する
様にして処理速度の向上を計るといった事もします。
    • good
    • 0
この回答へのお礼

scaleやtranslateにとらわれなければ、この考え方で必要な図形のみ描画させるのがよさそうですね。ありがとうございます。

お礼日時:2007/12/17 10:35

スケールを変えて再描画


#↑普通はこうしますけど?

この回答への補足

下のように書いたとき、単純にスケールの拡大だけでは線幅もフォントサイズも動いてしまいます。ワールド変換だからだということまではわかったのですが、拡大しても、線幅もフォントサイズも固定する手段がわかりません。よろしくお願いします。
Dim g As Graphics = PictureBox1.CreateGraphics()
Dim f As Font = New Font("MS ゴシック", 8)
Dim p As Pen = New Pen(Color.Black, 1)

g.DrawRectangle(p, 10, 10, 10, 10)
g.DrawLine(p, 10, 10, 20, 20)
g.DrawString("RightTop", f, Brushes.Black, 20, 10)
g.DrawString("RightBottom", f, Brushes.Black, 20, 20)

g.TranslateTransform(30, 30)
g.ScaleTransform(5, 5)
g.DrawRectangle(p, 10, 10, 10, 10)
g.DrawLine(p, 10, 10, 20, 20)
g.DrawString("RightTop", f, Brushes.Black, 20, 10)
g.DrawString("RightBottom", f, Brushes.Black, 20, 20)

g.Dispose()
f.Dispose()

補足日時:2007/12/16 11:50
    • good
    • 0

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