• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

nhoccute
Bài viết: 1
Ngày tham gia: T.Bảy 29/05/2010 4:44 pm

Re: Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Gửi bàigửi bởi nhoccute » CN 30/05/2010 10:05 pm

nhờ anh tư vấn em chút .em mới hoc. vb căn bản thui àh .nhưng cô cho ra đề tài về đồ họa .vẽ hình tam giác 3d xoay (dùng 2d vẽ sao cho giống như 3d ).sau khi nghiên kúi mày mò em mới mò tới đây ùi bí. ý tưởng là vẽ các tam giác nhỏ tô màu đậm và các tam giác to dần và màu cung nhạt dần. nhưng chua cho nó xoay dc. mong cao thủ về đồ họa vb giúp . "coder " của em nè :

Mã: Chọn hết

Imports System.Drawing.Drawing2D
Public Class Form1
    Dim dc As Graphics = Me.CreateGraphics()
    Dim d As Integer = 0
    Dim pl As Boolean
    Dim pt1 As New PointF(pt4.X, pt4.Y - 30)
    Dim pt2 As New PointF(pt4.X + 50, pt4.Y + 50)
    Dim pt3 As New PointF(pt4.X - 50, pt4.Y + 50)
    Dim pt4 As New PointF(50, Height - 55)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.InitializeComponent()
        Me.Timer1.Enabled = True
        Me.Timer1.Interval = 500
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim dc As Graphics = Me.CreateGraphics()
        If (pt1.Y Or pt2.Y Or pt3.Y) <= Top Then

            d = 0
            pt1.X = 50
            pt1.Y = Height - 85
            pt2.X = pt1.X + 50
            pt2.Y = pt1.Y + 50
            pt3.X = pt1.X - 50
            pt3.Y = pt1.Y + 50
            pt4.X = pt1.X
            pt4.Y = pt1.Y + 30

            dc.Clear(Color.LightCyan)

            Dim grp As New GraphicsPath
            grp.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp.AddLine(pt3.X, pt3.Y, pt2.X, pt2.Y)
            Dim rg As New Region(grp)
            dc.FillRegion(New SolidBrush(Color.Red), rg)

            Dim grp1 As New GraphicsPath
            grp1.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp1.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp1.AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y)
            Dim rg1 As New Region(grp1)
            dc.FillRegion(New SolidBrush(Color.Blue), rg1)

            Dim grp2 As New GraphicsPath
            grp2.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp2.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp2.AddLine(pt1.X, pt1.Y, pt3.X, pt3.Y)
            Dim rg2 As New Region(grp2)
            dc.FillRegion(New SolidBrush(Color.Green), rg2)
            d = 1
        ElseIf d = 1 Then
            pt1.Y = pt1.Y - 50
            pt1.X = pt1.X + 170

            pt2.Y = pt1.Y + 50
            pt2.X = pt1.X - 50
            pt3.X = pt1.X - 50
            pt3.Y = pt1.Y - 50
            pt4.X = pt1.X - 30
            pt4.Y = pt1.Y
            dc.Clear(Color.LightCyan)
            Dim grp As New GraphicsPath
            grp.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp.AddLine(pt3.X, pt3.Y, pt2.X, pt2.Y)
            Dim rg As New Region(grp)
            dc.FillRegion(New SolidBrush(Color.Red), rg)

            Dim grp1 As New GraphicsPath
            grp1.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp1.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp1.AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y)
            Dim rg1 As New Region(grp1)
            dc.FillRegion(New SolidBrush(Color.Blue), rg1)

            Dim grp2 As New GraphicsPath
            grp2.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp2.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp2.AddLine(pt1.X, pt1.Y, pt3.X, pt3.Y)
            Dim rg2 As New Region(grp2)
            dc.FillRegion(New SolidBrush(Color.Green), rg2)

            d = 2
        ElseIf d = 2 Then
            pt1.Y = pt1.Y - 70
            pt1.X = pt1.X + 120

            pt2.Y = pt1.Y - 50
            pt2.X = pt1.X - 50
            pt3.X = pt1.X + 50
            pt3.Y = pt1.Y - 50
            pt4.X = pt1.X
            pt4.Y = pt1.Y - 30
            dc.Clear(Color.LightCyan)
            Dim grp As New GraphicsPath
            grp.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp.AddLine(pt3.X, pt3.Y, pt2.X, pt2.Y)
            Dim rg As New Region(grp)
            dc.FillRegion(New SolidBrush(Color.Blue), rg)

            Dim grp1 As New GraphicsPath
            grp1.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp1.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp1.AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y)
            Dim rg1 As New Region(grp1)
            dc.FillRegion(New SolidBrush(Color.Green), rg1)

            Dim grp2 As New GraphicsPath
            grp2.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp2.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp2.AddLine(pt1.X, pt1.Y, pt3.X, pt3.Y)
            Dim rg2 As New Region(grp2)
            dc.FillRegion(New SolidBrush(Color.Red), rg2)

            d = 3
        ElseIf d = 3 Then
            pt1.Y = pt1.Y - 150
            pt1.X = pt1.X + 100

            pt2.Y = pt1.Y - 50
            pt2.X = pt1.X + 50
            pt3.X = pt1.X + 50
            pt3.Y = pt1.Y + 50
            pt4.X = pt1.X + 30
            pt4.Y = pt1.Y
            dc.Clear(Color.LightCyan)
            Dim grp As New GraphicsPath
            grp.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp.AddLine(pt3.X, pt3.Y, pt2.X, pt2.Y)
            Dim rg As New Region(grp)
            dc.FillRegion(New SolidBrush(Color.Blue), rg)

            Dim grp1 As New GraphicsPath
            grp1.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp1.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp1.AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y)
            Dim rg1 As New Region(grp1)
            dc.FillRegion(New SolidBrush(Color.Green), rg1)

            Dim grp2 As New GraphicsPath
            grp2.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp2.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp2.AddLine(pt1.X, pt1.Y, pt3.X, pt3.Y)
            Dim rg2 As New Region(grp2)
            dc.FillRegion(New SolidBrush(Color.Red), rg2)
            d = 4

        ElseIf d = 4 Then


            pt1.X = pt1.X + 200
            pt1.Y = pt1.Y - 150
            pt2.X = pt1.X + 50
            pt2.Y = pt1.Y + 50
            pt3.X = pt1.X - 50
            pt3.Y = pt1.Y + 50
            pt4.X = pt1.X
            pt4.Y = pt1.Y + 30

            dc.Clear(Color.LightCyan)
            Dim grp As New GraphicsPath
            grp.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp.AddLine(pt3.X, pt3.Y, pt2.X, pt2.Y)
            Dim rg As New Region(grp)
            dc.FillRegion(New SolidBrush(Color.Blue), rg)

            Dim grp1 As New GraphicsPath
            grp1.AddLine(pt4.X, pt4.Y, pt2.X, pt2.Y)
            grp1.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp1.AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y)
            Dim rg1 As New Region(grp1)
            dc.FillRegion(New SolidBrush(Color.Green), rg1)

            Dim grp2 As New GraphicsPath
            grp2.AddLine(pt4.X, pt4.Y, pt3.X, pt3.Y)
            grp2.AddLine(pt4.X, pt4.Y, pt1.X, pt1.Y)
            grp2.AddLine(pt1.X, pt1.Y, pt3.X, pt3.Y)
            Dim rg2 As New Region(grp2)
            dc.FillRegion(New SolidBrush(Color.Red), rg2)
            d = 1
        End If
    End Sub
End Class

đây là lần đầu tiên em pót bài có gì hok đúng mong mod bỏ wa nha .thank mọi người nhùi nhùi



httuan86
Bài viết: 8
Ngày tham gia: T.Sáu 18/07/2008 11:20 am

Re: Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Gửi bàigửi bởi httuan86 » T.Hai 14/06/2010 12:58 am

Mọi người ơi!
Mình đọc qua cái phần hướng dẫn vẽ đường thẳng mình làm nhưng nó không thực thi gì cả. Mình gửi file của mình lên mọi người xem nó lỗi chỗ nào sửa cho mình với.
Tập tin đính kèm
Ve hinh 2.rar
(56.96 KiB) Đã tải 372 lần

courtney
Bài viết: 4
Ngày tham gia: T.Tư 23/06/2010 9:07 pm

Re: Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Gửi bàigửi bởi courtney » T.Tư 23/06/2010 9:44 pm

Tôi mới vào nghề nên không biết nhiều. Tôi đang muốn xoay được ảnh trong picturebox. Đọc hướng dẫn của các bạn về việc dùng graphics, cũng muốn làm theo. Nhưng tôi không thể imports được các namespace system.drawing.image..., không định nghĩa được biến Graphics. Tôi không biết là phải có thao tác nào hay phải khai báo cái gì khác trước đó không.
Các bạn chỉ giúp tôi với!
Thanx.

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Gửi bàigửi bởi PAPYRON » CN 28/10/2012 1:38 pm

Anh Hai ơi cho em hỏi.
Hum bữa làm game karo, dùng double buffered graphics ( ;) )

Mã: Chọn hết

 
context = BufferedGraphicsManager.Current
context.MaximumBuffer = New Size(Me.Width + 1, Me.Height + 1)
graph = context.Allocate(Me.CreateGraphics(), _
New Rectangle(0, 0, Me.Width, Me.Height))

vẽ ma trận 24x24 ô chữ nhật và chú trỏ chuột.

Mã: Chọn hết

   

    Private mousepos As Point
    Private btn As MouseButtons
    Private closeb As New Rectangle()

Public Sub DrawOnForm()
        Const start = 10

        Dim rec As New Rectangle
        rec.Width = 30
        rec.Height = 20
        g.Graphics.Clear(frm.BackColor)
        'g.Graphics.DrawImage(My.Resources.Reflection, New Point(0, 0))
        For x As Integer = 1 To 24
            For y As Integer = 1 To 24
                rec.X = start + x * 30
                rec.Y = start + 25 + y * 20
                g.Graphics.DrawRectangle(Pens.White, rec)
                If (mousepos.X > rec.X) And (mousepos.X < rec.X + rec.Width) _
                   And (mousepos.Y > rec.Y) And (mousepos.Y < rec.Y + rec.Height) Then

                    If btn = MouseButtons.Left Then
                        g.Graphics.FillRectangle(Brushes.LightPink, rec)
                        'ReDim pos(0 To 24, 0 To 24)
                        pos(x, y) = 1
                    Else
                        g.Graphics.FillRectangle(Brushes.LightGreen, rec)

                    End If

                End If
                If pos(x, y) = 1 Then
                    'g.graphics.graphics.FillRectangle(Brushes.HotPink, rec)
                    g.Graphics.DrawImage(My.Resources.caro_bluw, rec.X, rec.Y)

                End If
                If pos(x, y) = 2 Then
                    'g.graphics.graphics.FillRectangle(Brushes.LightGreen, rec)
                    g.Graphics.DrawImage(My.Resources.caro_red, rec.X, rec.Y)

                End If
                'g.Graphics.DrawString(pos(x, y).ToString, New Font("Segoe UI", 10), Brushes.White, New PointF(x * 30 + 20, y * 20 + 15))
            Next
        Next
        g.Graphics.DrawImage(My.Resources.cursor, mousepos.X - 20, mousepos.Y - 10)
    End Sub


Nó cho em 3-4fps. :D
Vậy phải làm sao đây ạ? :((
Em đang chuyển qua SDL.NET làm tiếp nhưng mà bên đó toàn là ví dụ CS không hà, cái converter nó dịch ra sai tá lả.
vậy là:
Dim kếtquả as new result
KQ = result.fail :-bd

Plz Xin giúp em với.

Hình đại diện của người dùng
1045007
Thành viên danh dự
Thành viên danh dự
Bài viết: 551
Ngày tham gia: T.Hai 09/06/2008 3:35 pm
Đến từ: TP Cần Thơ
Has thanked: 2 time
Been thanked: 64 time
Liên hệ:

Re: Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Gửi bàigửi bởi 1045007 » T.Hai 29/10/2012 10:41 am

Đọc code của bạn thì biết thế tạo sao nó chậm rồi. mỗi lần đi thì bạn lại vẽ hết toàn bộ lại bàn cờ : phí
bạn tách riêng nó thành 2 cái sub 1 cái vẽ bàn cờ 1 sub vẽ dấu x thì sẽ có kết quả khác ngay
Mặt khác bạn tạo 1 class bàn cờ thì trông ổn hơn là đi xác định các tọa độ 1 cách rất mất thời gian trên 1 đối tượng hiển thị như là Form hay j đó .. mà bạn đang sử dụng.

Hung_tthanh
Thành viên chính thức
Thành viên chính thức
Bài viết: 16
Ngày tham gia: T.Năm 27/03/2008 10:45 pm

Re: Sử Dụng Lớp Graphics - Vẽ Những Nét Cơ Bản

Gửi bàigửi bởi Hung_tthanh » T.Ba 24/09/2013 8:41 am

Cho mình hỏi mình muốn tạo hệ đơn vị cho phần vẽ giống như autocad vậy, ví dụ như mặc hệ đơn vị bản vẽ là mét thì vẽ đoạn 1m giống như khi vẽ trong đơn vị mm là 1000 vậy thì mình làm như thế nào...


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách