2006년 12월 20일 수요일

VB.NET 에서 PictureBox 에 그림 그리기

출처 : Devpia

VB2005 Beta 2로 공부를 시작한 초보입니다.

Picturebox에서 그림을 그렸는데 Auto redraw 기능이 없어서 정상적으로 그림이 보이지 않더군요.

그림을 처음 그렸을 때는 보이지 않다가 창을 움직이면 보이고,

최대창이나 최소창으로 하면 또 안보이고...

VB6에서 처럼 Auto redraw 기능을 구현할 수 없는지요?

=============================================================================

제목을 보시면 무슨 이야기 인가 하실수도 있으실텐데요

   

닷넷에서는 옛날과는 달리 그래픽 작업을 직접 개체에 하지 않아도 됩니다. 그것은 매우 유용한 일이 되는것이죠~~

   

닷넷에서는 Bitmap이라는 클래스를 지원을 합니다. 그래픽 작업을 하실때 유용한 클래스 인데요

   

이곳에 직접 그래픽을 생성해서 넣고 그것을 픽쳐 박스의 image로 연결을 하시면 Autoredraw없이 사용하실수 있습니다.

   

정희 AutoRedraw기능을 구현하고 싶으시면 Paint이벤트의 Graphics개체를 이용하여 코딩을 하시면 되는데...

   

그것보다는 위의 방식을 사용하시는것이 좀더 쉬우실겁니다.

   

Bitmap을 사용하는 간단한 예제를 드리자고 하면

   

Private oImage As New Bitmap(500, 500)

Private oGraphics As Graphics = Graphics.FromImage(oImage)

   

위와같이 선언을 하시고요

   

PircutBox.Image = oImage 라고 연결후 oGraphics변수로 작업을 하시면 됩니다. 사용방법은 PicturBox에서 그림 그리시는것과 같으니까 쉬우실 겁니다.

물론 새로운 작업을 oGraphics변수로 작업을 하시면 물론 PicturBox에서 표시가 됩니다. 사이즈 조정으로 화면이 없어지거나 하지도 않고요

저장 하실때도 편리 하실겁니다.

   

아래는 간단한 예제입니다. 참고하세요~~

   

    Private oImage As New Bitmap(500, 500)

    Private oGraphics As Graphics = Graphics.FromImage(oImage)

   

    Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '예제이기 때문에 폼에 코드만 넣어도 실행될수 있도록 동적으로 컨트롤 생성한겁니다.

        Dim picBitmapEx As New PictureBox

        Dim btnBitmapEx As New Button

        With picBitmapEx

            .Name = "picBitmapEx"

            .Dock = DockStyle.Fill

            .Visible = True

            '위에 선언한 Bitmap클래스를 Image로 설정합니다.

            .Image = oImage

        End With

        With btnBitmapEx

            .Name = "btnBitmapEx"

            .Text = "이미지 생성"

            .Width = 200

            .Visible = True

        End With

        AddHandler btnBitmapEx.Click, AddressOf Me.Button_Click

        Me.Controls.Add(btnBitmapEx)

        Me.Controls.Add(picBitmapEx)

    End Sub

   

    '동적으로 생성한 버튼을 클릭했을때 그리드를 그립니다.

    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Dim pen As Pen = New Pen(System.Drawing.Color.DimGray, 2)

        Dim Rect As Rectangle = New Rectangle(40, 70, 400, 180)

        ' 모눈종이 눈금 그리기(y축)

        For x As Integer = 40 To 440 Step 10

            oGraphics.DrawLine(New Pen(Color.DarkGray, 1), x, 70, x, 250)

        Next x

   

        '모눈종이 눈금 그리기(x축)

        For y As Integer = 70 To 250 Step 10

            oGraphics.DrawLine(New Pen(Color.DarkGray, 1), 40, y, 440, y)

        Next y

        '동적 생성한 컨트롤이기에 이 부분이 필요함

        Me.Refresh()

    End Sub

   

예제 만드는 것보다 파랑칠 하는게 더 어렵죠

댓글 없음:

댓글 쓰기