2016-05-27 10 views
0

私はマウスで制御できる私のフォーム上に地図を表示したいと思います。私はスクロールホイールで地図のズームを調整できるようにしたい、私はズームしているときにマップの周りのビューを移動することができるようにしたいので、私は周りを見ることができます。私は絵のボックスを静的にし、実際の画像を地図の周りを見回す幻想に変えたいだけです。私はこれで多くの困難を抱えています。静的な画像ボックス内の画像を移動したり、地図の正しい部分を動的に表示するために何らかのグラフィックス描画を使用しなければならないのですか?静的な画像ボックスで画像をシフト

+0

ズームするには、少なくとも1つの縮尺変更画像を作成する必要があります。ズームの時点で再描画するか、ズームしたイメージのリストを事前に作成して、動的に行うかのどちらかです。それをパニング(シフト)する限り、メモリとCPUの消費量の最小化は、スクロール可能なパネルに自動サイズのピクチャボックスを配置することです。マウスでドラッグすると、カーソルの動きに応じてパネルがスクロールする方法を計算する必要があります。 –

答えて

0

私はあなたのペイントイベントを使って、フォーム上またはパネル内に直接描画することをお勧めします。

Public Class Form1 
    Private _moveIt As Boolean = False 
    Private _coyote As Image 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     _coyote = PictureBox1.Image 
    End Sub 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     _moveIt = True 
     PictureBox1.Invalidate() 

    End Sub 

    Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint 
     If _moveIt = True Then 
      PictureBox1.Image = Nothing 
      e.Graphics.DrawImage(_coyote, New Rectangle(New Point(32, 64), _ 
                 New Size(_coyote.Width, _coyote.Height))) 
     End If 
    End Sub 

End Class 

しかし、ピクチャを区別する一つのことは、もはや使用されているので、(Nothingに設定)のPictureBoxのImageが削除されたことがわかりません:ここに示したようにはい、ピクチャボックスに画像を再配置することが可能です。

PictureBoxのImageプロパティを引き続き使用するには、元の画像に基づいて画像を再作成し、Imageプロパティとして設定する必要があります。これは実行可能なアプローチではありません。ペイントとそのGraphicsオブジェクトを使用して、フォーム上またはパネル内にイメージを描画します。

+1

'Image'プロパティをオーバーライド/シャドウするカスタム画像ボックスを常に作成できます。このようにして、コントロールを描画することなく画像を保存することができます。 –

+0

簡単な解決策のように思えるピクチャボックスを使う必要はありません。パネルでペイントグラフィックスを使用しても、イメージを動的に変更できますか?画像のズームインやズームアウト、パンのように? – TobiasKnudsen

+0

@TobiasKnudsen:もちろん、どんなコントロールでも使用できます。 :) –

関連する問題