PictureBoxへの再描画について
- 題名: PictureBoxへの再描画について
- 著者: ぼる
- 日時: 2009/02/04 19:08:41
- ID: 23919
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: PictureBoxへの再描画について
- 著者: 管理人
- URL: http://dobon.net/
- 日時: 2009/02/05 4:07:36
- ID: 23922
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: PictureBoxへの再描画について
- 著者: ぼる
- 日時: 2009/02/05 13:43:55
- ID: 23928
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: PictureBoxへの再描画について
- 著者: 魔界の仮面弁士
- 日時: 2009/02/05 14:18:50
- ID: 23929
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: PictureBoxへの再描画について
- 著者: ぼる
- 日時: 2009/02/05 22:56:59
- ID: 23932
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
VB.NETの質問です。よろしくお願いします。
PictureBoxへトリミングしてからそれを2倍に拡大した画像を表示し、その上からラインを引きたいのですが、ラインを引くときにマウスをドラッグ中にリアルタイムに描画しているのでトリミングして拡大した画像を同じくリアルタイムに描画すると重くてカクカクになってしまいます
BackgroundImageに読み込めればそこまで重くないのですがそうするとトリミングと拡大が出来なくなってしまうので困っています。
トリミングしたのをファイルに一旦保存してから表示すれば軽いのでしょうがゴミファイルが溜まってしまいそうなので避けたいです
色々考えたり検索してみましたがいい解決法が見つからないので、どうかお力をお貸し下さいo(_ _)o
http://www2.uploda.org/uporg1990075.avi.html
言葉が足りなかったりわかりにくいかもしれないので動画です。
ラインを再描画するとき一旦PictureBoxを消しているので画像が消えてしまっています。画像を消さずに上からのライン描画を軽く処理できる方法を探しています
Public Class Form1
Public Function AutoGraphics(ByVal picSource As PictureBox) As Graphics
If picSource.Image Is Nothing Then
picSource.Image = New Bitmap(picSource.ClientRectangle.Width, picSource.ClientRectangle.Height)
End If
Return Graphics.FromImage(picSource.Image)
End Function
'ラインを引く
Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If MouseButtons = Windows.Forms.MouseButtons.Left Then
PictureBox1.Image = Nothing
Dim X2 As Integer
Dim Y2 As Integer
Dim Pos As Point = PictureBox1.PointToClient(Windows.Forms.Cursor.Position)
X2 = Pos.X
Y2 = Pos.Y
Dim g2 As Graphics = AutoGraphics(PictureBox1)
g2.DrawLine(Pens.Red, 0, 0, X2, Y2)
End If
End Sub
'画像をトリミングして表示
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Image = Nothing
Dim img = New Bitmap("C:\d_o.jpg")
'画像の一部を切り取って表示する(トリミング)
'元の画像の(10,10)-(200,200)の部分を切り取って表示
Dim rect As New Rectangle(10, 10, 200, 200)
Dim rectDst As New RectangleF(0, 0, rect.Width * 2, rect.Height * 2)
'PictureBox1のGraphicsオブジェクトの作成
Dim g As Graphics = AutoGraphics(PictureBox1)
'補間方法としてニアレストネイバー法を使用
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor
g.DrawImage(img, rectDst, rect, GraphicsUnit.Pixel)
'オブジェクトの破棄
img.Dispose()
g.Dispose()
End Sub
End Class