• ベストアンサー

座標系のみ拡大したい

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

質問者が選んだベストアンサー

  • ベストアンサー
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

座標系のスケールは変更せずに描画する図形の座標を 変更すれば線幅もフォントも変更せずにすみます g.DrawLine(p, 10, 10, 20, 20)    ↓ g.DrawLine(p, 10 * n, 10 * n, 20 * n, 20 * n) 拡大率が大きくなる場合には、図形要素が画面内に入る か否かを判別して、表示対象の図形要素のみを描画する 様にして処理速度の向上を計るといった事もします。

pen110
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.1

スケールを変えて再描画 #↑普通はこうしますけど?

pen110
質問者

補足

下のように書いたとき、単純にスケールの拡大だけでは線幅もフォントサイズも動いてしまいます。ワールド変換だからだということまではわかったのですが、拡大しても、線幅もフォントサイズも固定する手段がわかりません。よろしくお願いします。 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()

すると、全ての回答が全文表示されます。

関連するQ&A