¡@

Graphic method in vb net(A)

2018¦~12¤ë02¤é

­º­¶

¡@

²Ä¤G¤Q¤@³¹VB .NETø¹Ïª«¥ó¤Î¤èªk¤¶²Ð(¤W)

21.1«e¨¥

­n¦p¦ó§Q¥ÎVB .NET©Ò´£¨Ñ¤§¤u¨ãø»s¹Ï§Î©O¡H¬Û«H«Ü¦h¤H±qVB 6.0¤É¯Å¨ìV B.NETª©¥»«á¡A·|ı±oVB .NET¦ü¥GÅܱo½ÆÂø¤Î§xÃø¨Ç¡H¤×¨ä¬Oø¹Ï¤è­±§ó¬O¦p¦¹¡C¦¹¥i¯à»PVB .NET¤£¦A´£¨Ñø¹Ïª«¥ó©Î±±¨î¶µªºAutoRedraw

¡BScaleMode¡BScale¡BDrawModeµ¥ÄݩʤιϮפè¶ô(PictureBox)§l¨úÃC¦âªºPoint()¤Î«ü©wÃC¦âµeÂIPset()µ¥¤èªk¦h¤Ö¦³¨ÇÃö«Y¡C¤U­±§Ú­Ì´N¬°VB .NETø¹Ïª«¥ó»Pø¹Ï¤èªk§@²­nªº»¡©ú¡A¨ä¥L»Pø¹Ï¾ã¦X³]­pÆ[©À¦³ÃöªÌ¦pScaleMode¡BScaleµ¥«h·|¥t³¹°Q½×¡C¤@¯ë¦Ó¨¥¡A¦bVB .NET§@·~Àô¹Ò¤Uµe¹Ï¡A°£±±¨î¶µ¦³Paint event handerªÌ¥~¡A¦h»Ý¥ý«Ø¥ßø¹Ïª«¥ó(Graphics)§@¬°µe¹Ï°Ï°ì¡AµM«á©w¸q¤@­Óµ§¨ê(Brush)©Î(©M)µeµ§(Pen)¡A¥H¶ñ¥R¹Ï§Î¤º³¡°Ï°ì¤Î¥~®Ø¡C

 

21.2µe¹Ïµ²ºc

 

   VB .NETªºSystem.Drawing¦W¦rªÅ¶¡¤º¡A©w¸q¤F¥|ºØ±`¥Îªºµ²ºc(Stucture)«¬ºA¡G(1)ÃC¦â(Color)¡A(2)ÂI(Point)¡A(3)¤Ø¤o(Size)¡A(4)¯x§Î(Rectangle)¡C

 

µ²ºc(Structure)

»¡©ú

Color

ARGB(alpha,red,green,blue)¡A¥Nªí¦â±m³z©ú«×alpha­È¤Î¦â±mªºR.G.B­È¡C

Point

ªí¥Ü¾ã¼ÆX©MY®y¼Ðªº±Æ§Ç°t¹ï¡A³o­Ó°t¹ï­È¡A¥Î¨Ó©w¸q¤Gºû¥­­±ªºÂI¦ì¸m¡C

Size

Àx¦s¤w±Æ§Çªº¾ã¼Æ°t¹ï¡A³q±`¬O¯x§Îªº¼e«×©M°ª«×¡C

Rectangle

Àx¦s¥|­Ó¬°¤@²Õªº¾ã¼Æ¡Aªí¥Ü¯x§Î¦ì¸m©M¤j¤p¡C¦p»Ý§ó¦h¶i¶¥ªº°Ï°ì¨ç¦¡¡A½Ð¨Ï¥Î System.Drawing.Region ª«¥ó¡C

 

21.2.1 ÃC¦âµ²ºc

±`¥Î¿ï¾ÜÃC¦âªº¤èªk¦³(1)color.Colorname¡A(2)Color.FromRGB()¡A

(3)ColorTrans.FromOle()¡A(4)Color.FromName()¡A(5)ColorTranslator

.FromWin32()杭C

21.2.1.1¨t²Î¹w³]ÃC¦â

¨Ï¥Î¨t²Î¹w³]Colorµ²ºc¥i¥Hª½±µ³]©w¡G
¨Ò¦p±NButton1­I´ºÃC¦â³]©w¦¨ÂŦâ¡A¥i¼g¦¨¡G

 

Button1.BackColor=Color.Blue

­n±NLabel1«e´º¦â³]©w¬°¬õ¦â¡A¥i¼g¦¨¡G

 

Label1.ForeColor=Color.Red

 

¦pªG­n³]©w¨ä¥LÃC¦â¡A­n¦p¦ó³]©w©O¡HMicrosoft MSDN©x¤èºô¯¸¦CÁ|¤F«Ü¦hºØÃC¦â¦p¤Uªí¥i¨ÑUser¨Ï¥Î¡C¨Ò¦p·Q­n³]©w¨Ï¥Î²L¦Ç¦â¤Î¦Ç¦â¥i¥H¼g¦¨Color.LightGray©Î²`¦Ç¦âColor.DarkGray¡F¯»¬õ¦â´N¼g¦¨Color.Magenta¡A²`¬õ¦â¼g¦¨Color.DeepPink¡C

 

¤U­±¬°¼g¥XVB .NET´£¨Ñªº©Ò¦³¹w³]ÃC¦â¤ù¬qµ{¦¡½X¡A¨ÑŪªÌ°Ñ¦Ò¡C

 

Private Sub FrmCollections_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim colorNames As New System.Collections.Generic.List(Of String)

        For Each known As KnownColor In [Enum].GetValues(GetType(KnownColor))

 '±q¦CÁ|¹w³]ÃC¦â°}¦C²M³æ¤¤¨ú¥XÃC¦âª«¥ó

            Dim specific As Color = Color.FromKnownColor(known) '

            If Not specific.IsSystemColor Then

                colorNames.Add(known.ToString())

            End If

        Next known

        colorNames.Sort() '±Æ§Ç

        For Each colorName As String In colorNames

            ListBox1.Items.Add(colorName) '¼g¥XÃC¦â¨ìListBox1

        Next colorName

    End Sub

 

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged '±qListBox1¿ï¨úÃC¦â

        Dim st1 As String

        st1 = ListBox1.SelectedItem.ToString

        Dim col1 As Color

        col1 = Color.FromName(LblColor.Text)

        Dim st2 As String = GetHexColor(col1)

        LblColor.Text = st1

        PicColorShow.BackColor = Color.FromName(st1) 'Åã¥ÜÃC¦â

    End Sub

 

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged  ¡¥¿ï¨úÃC¦â

        Dim st1 As String

        st1 = ListBox1.SelectedItem.ToString

        Dim col1 As Color

        col1 = Color.FromName(LblColor.Text)

        Dim st2 As String = GetHexColor(col1)

        LblColor.Text = st1

        PicColorShow.BackColor = Color.FromName(st1)

    End Sub

 

 (¨ú§÷¦Ûhttp://www.happyvb.twbbs.org/wp-content/uploads/2010/03/Color.png)

21.2.1.2 RGB¤T­ì¦â

¦pªG­n¥HRGB(Red,Green,Blue)¤T­ì¦â¨Ó³]©w¦â±m¡A¥i¨Ï¥ÎColor.FromArgb¤èªk¡A»yªk¡G

 

Color.FromArgb(R,G,B)

 

R¡BG¡BBªº½d³ò¬O0~255ªº¾ã¼Æ¡A¦]¦¹§Q¥Î¦¹¤èªk¥i³]©w¦h¹F256*256*256=

1677,7216ºØÃC¦â¡C¤Uªí¬°¸ûºØ±`¥ÎÃC¦âªºRGB­È¡G

 

ÃC¦â

R

G

B

¬õ(Red)

255

0

0

ºñ(Green)

0

128

0

²LÂÅ(LightBlue)

0

255

255

ÂÅ(Blue)

0

0

255

¶À(Yellow)

255

255

0

µµ(Violet)

128

0

128

¶Â(Black)

0

0

0

¥Õ(White)

255

255

255

 

¦p­n³]©wªí³æ­I´ºÃC¦â¬°ºñ¦â¡A¥i¼g¦¨¡G

Me.BackColor=Color.FromArgb(0,128,0)

«ü¥O«ö¶s³æ­I´ºÃC¦â¬°²LÂŦâ¡A¥i¼g¦¨¡G

Button1.BackColor=Color.FromArgb(0,255,255)

 

 

21.2.1.3 ColorTranslator.FromOle¤èªk

¦pªG­n¨Ï¥ÎVB 6.0ªºQBColor()ÃC¦âªí¥Üªk¡A¥i¨Ï¥ÎColorTranslator.FromOle¤èªk¡CVB 6.04ªºQBColor¦³16ºØÃC¦â(0~15)¡A¦³ÃöQBColor()ÃC¦â­È¥i°Ñ¦Ò¤Uªí¡G

 

ÃC¦â

¥N½X

ÃC¦â

¥N½X

¶Â(Black)

0

¦Ç(Gray)

8

ÂÅ(Blue)

1

²LÂÅ(Light Blue)

9

ºñ(Green)

2

²Lºñ(Light Green)

10

«C(Cyan)

3

²LÂÅ(Light Cyan)

11

¬õ(Red)

4

²L¬õ(Light Red)

12

¯»¬õ(Magenta)

5

²L¯»¬õ(Light Magenta)

13

¶À(Yellow)

6

²L¶À(Light Yellow)

14

¥Õ(White)

7

«G¥Õ(Bright White)

15

 

¨Ï¥Î»yªk¬°¡G

ColorTranslator.FromOle(QBColor(ÃC¦â­È¥N½X))

¨Ò¦p­n±Nªí³æ­I´ºÅã¥Ü¦¨¬õ¦â¡A¥i¼g¦¨¡G

 

Me.BackColor = ColorTranslator.FromOle(QBColor(12))

 

21.2.1.4 Color.FromName()

 

Color.FromName()¨Ï¥Î»yªk¬°¡G

 

Color.FromName("ÃC¦â¦WºÙ")

 

¨Ò¦p­n±N¼ÐÅÒ­I´ºÅã¥Ü¦¨¬õ¦â¡A¥i¼g¦¨¡G

 

LblColorShow.BackColor = Color.FromName("red")

21.2.1.5 ColorTranslator.FromWin32()

 

VB .NET¤]¤ä´©¥H¤Q¤»¶i¦ì¨Óªí¥ÜÃC¦â­È¡A§Ú­Ì¥i¥H¨Ï¥ÎColorTranslator.FromWin32¤èªk¡A¨Ã¦b¤Q¤»¶i¦ì­È«e­±¥[¤W&H§Y¥i¡C

¨Ï¥Î»yªk¬°¡G

 

ColorTranslator.FromWin32(&H¤Q¤»¶i¦ì­È)

 

¨Ò¦p±N¼ÐÅÒ±±¨î¶µªº­I´º§ï¦¨¬õ¦â¡A¥i¼g¦¨¡G

 

Label1.BackColor = ColorTranslator.FromWin32(¡®HFF0000)

 

21.2.2 ÂIµ²ºc

ÂI(Point)¥D­n¦b©w¸qÂIªº¦ì¸m¡A¦p¤£¨Ï¥ÎÂIµ²ºc¡A«h¥²¶·¨Ï¥Î¨â­Ó¼Æ¦r(¾ã¼Æ©Î¯BÂI¼Æ)¨Ó³W½dÂIªº¦ì¸m¡C¨ä¨Ï¥Î»yªk¬°¡G

 

Dim Pt1 As Point =New(20,30)   ¡¥¾ã¼Æ«¬ºA

Dim Pt2 As PointF =New(20F,30F)   ¡¥¯BÂI¼Æ«¬ºA

©Î

Dim Pt1 As Point

Pt1=New(20,30)   ¡¥¾ã¼Æ«¬ºA

Dim Pt2 As PointF

Pt2 =New(20F,30F)   ¡¥¯BÂI¼Æ«¬ºA

©Î

Dim Pt1 As Point

Pt1.x= 20   ¡¥¾ã¼Æ«¬ºA

Pt1.y= 30   ¡¥¾ã¼Æ«¬ºA

Dim Pt2 As Point

Pt2.x = 20F   ¡¥¯BÂI¼Æ«¬ºA

Pt2.y = 30F   ¡¥¯BÂI¼Æ«¬ºA

21.2.3 ¤Ø¤oµ²ºc

¤Ø¤o(Size)¥D­n¦b©w¸qª«¥óªº¼e¡Bªø¤Ø¤o¡A¤Ø¤oµ²ºc¥i¬°¾ã¼Æ©Î¯BÂI¼Æ¨âºØ¡C¨ä¨Ï¥Î»yªk¬°¡G

 

Dim Size1 As Size =New(20,30)   ¡¥¾ã¼Æ«¬ºA

Dim Size2 As SizeF =New(20F,30F)   ¡¥¯BÂI¼Æ«¬ºA

©Î

Dim Size1 As Size

Size1=New(20,30)   ¡¥¾ã¼Æ«¬ºA

Dim Size1 As SizeF

Size2 =New(20F,30F)   ¡¥¯BÂI¼Æ«¬ºA

21.2.4 ¯x§Îµ²ºc

¯x§Îµ²ºc(Rectangle)µ²¦XÂI¤Î¼eªø¤Ø¤oªº¸ê®Æµ²ºc¡A¨ä¥i¬°¾ã¼Æ©Î¯BÂI¼Æ¨âºØ¡C¨ä¨Ï¥Î»yªk¬°¡G

 

Dim Rect1 As Rectangle =New(2,2,20,30)   ¡¥¾ã¼Æ«¬ºA

Dim Rect2 As RectangleF =New(2F,2F,20F,30F)   ¡¥¯BÂI¼Æ«¬ºA

©Î

Dim Rect1 As Rectangle

Rect1=New(2,2,20,30)   ¡¥¾ã¼Æ«¬ºA

Dim Rect1 As RectangleF

Rect2 =New(2F,2F,20F,30F)   ¡¥¯BÂI¼Æ«¬ºA

¤W­z¡¨2,2¡¨©Î¡¨ 2F,2F¡¨¬°¯x§Î°_ÂI¡F¡¨20,30¡¨©Î¡¨ 20F,30F¡¨¬°¯x§Î¼e¡B°ª¡C

 

21.3µ§¨ê¡Bµeµ§¤Î¸ô®|

 

µ§¨ê(Brush)¤Îµeµ§(Pen)¬OVB .NET¤¤°£µe¹Ï°Ï°ì¥H¥~¡A¨âºØ«D±`­«­nªºµe¹ÏÃþ§O¡Cµ§¨ê¬O¥Î³æ¦â¡B¹Ï¯¾¡B¹Ï¤ù¡Bº¥Åܦâ±mµ¥¨Ó¶ñ¥R¶î©Ù¡B¾Q¶K¤@­Ó«Ê³¬°Ï°ì¡Cµeµ§«h¥Î¨Ó´yøª½½u¡B¦±½u©Î«Ê³¬°Ï°ìªº¥~Æ[¡C¦p­n¦P®É¥Îµ§¨ê¤Îµeµ§µe¦P¤@­Ó½d³ò¡A­ì«h¤WÀ³¥ý¥Îµ§¨ê¦A¥Îµeµ§¡A§_«hµeµ§¥i¯à·|³Qµ§¨ê±»»\³¡¥÷¥~®Ø½u±ø¡C

 

21.3.1µ§¨ê

µ§¨ê(Brush)¤@¯ë¦h»Pµe¹Ï¤èªk¦pFillEllipse¡BFillPath¡BFillPolygon¡BFillRectanle

¡BFillRectanles°t¦X¨Ï¥Î¡Cµ§¨ê¦³¹ê¤ßµ§¨ê(SolidBrush)¡B¯¾²zµ§¨ê(TextureBrush)¡B¹Ï¯¾µ§¨ê(HatchBrush)¡B½u©Ê¦â±mº¥Åܵ§¨ê(LinearGradientBrush)¡B¸ô®|¦â±mº¥Åܵ§¨ê(PathGradientBrush)µ¥¡C

(1)¹ê¤ßµ§¨ê

¹ê¤ßµ§¨ê¬°³æ¦âµ§¨ê¡A©w¸qSolidBrush»yªk¬°¡G

 

Dim myBrush As New SolidBrush(Color.Colorname)

 

¤W­z¤¤Colorname¥i¥H¥ô·N¹w³]¨t²Î¦â±m¦p¡GColor.Red¡BColor.Blue¡BColor.Black¡BColor.Grayµ¥µ¥¡C

 

(2)¯¾²zµ§¨ê

¯¾²zµ§¨ê¤@¯ë¦h¥HBitMap¹Ï¤ù¬°«Ê³¬°Ï°ì¾Q¶K¹Ï®×¡A¨Ï¥ÎTextureBrush»yªk¬°¡G

 

Dim myBrush As New TextureBrush(PicTure.Image)

 

¤W­z¤¤PicTure.Image¹Ï¤ù¦Wµ{¡C

(3)¹Ï¯¾µ§¨ê

¹Ï¯¾µ§¨ê¬°§Q¥ÎÂI¡B½u¡B§Îª¬µ¥Â²³æ¹Ï®×¶ñ¶K«Ê³¬°Ï°ìªÌ¡C

¨Ï¥ÎHatchBrush»yªk¬°¡G

 

Dim myBrush As New HatchBrush(HatchStyle.DiagonalCross, ForeColor, BackColr)

 

¤W­z¤¤ForeColor ¬°«e´ºÃC¦â¡ABackColr ¬°­I´ºÃC¦â¡A­I´ºÃC¦â¥i¥H¬Ù²¤¡C

VB .NET©Ò´£¨Ñªº¹Ï¯¾µ§¨ê¹Ï®×¦p¤U¦C©Ò¥Ü¡G

 

 

(4)½u©Ê¦â±mº¥Åܵ§¨ê

¦â±mº¥Åܤ@¯ë¬O¨âºØ©Î¨âºØ¥H¤WÃC¦â¥H½u©Êº¥Åܤ覡Åܤƪºµ§¨ê¡A¬°«Ê³¬°Ï°ì¤W¦âªÌ¡C

 

    Dim Rect As New Rectangle(40, 40, 150, 180) '¯x§Îº¥¼h

 Dim lBrush As New LinearGradientBrush(Rect, Color1, Color2, LinearGradientMode.Horizontal) 'º¥¼hµ§¨ê

 

¤W­z¤¤Color1 ¬°²Ä¤@ºØÃC¦â¡AColor2 ¬°²Ä¤GºØÃC¦â¡ALinearGradientMode.Horizontal¬°½u©Êº¥ÅܼҦ¡¡A¥H¥»¨Ò¦Ó¨¥¡Aº¥ÅܼҦ¡¬°¤ô¥­¤è¦V¡C

 

(5)¸ô®|¦â±mº¥Åܵ§¨ê

¸ô®|¦â±mº¥Åܵ§¨ê¡A¬°¥H¬YÂI¬°¤¤¤ßªºÃC¦â(¦p¶À¦â)¨Ì¬Y¸ô®|¦V¥~¨Ì½u©Êº¥ÅÜÃC¦â(¥~¼h¬°ÂŦâ¤Î¶Â¦â)¡A¬°«Ê³¬°Ï°ì¤W¦âªÌ¡C¤U­±¬°¸ô®|¦â±mº¥Åܵ§¨ê¤Îøµe¤èªkµ{¦¡¤ù¬q¡C

 

Dim Gr As Graphics = Me.CreateGraphics '¥Hªí³æ¬°Ã¸¹Ïª«¥ó(ø¹Ï°Ï)

        Dim myPath As New GraphicsPath

        Dim myRect As New Rectangle(50, 40, 140, 150)  ¡¥¸ô®|¥H¯x°}¬°·Ç

        myPath.AddRectangle(myRect)

        Dim myPGBrush As New PathGradientBrush(myPath)

        myPGBrush.CenterColor = Color.Yellow  ¡¥¤¤¤ßÃC¦â

        Dim Colors As Color() = {Color.Magenta, Color.Blue, Color.Black} '©P³òÃC¦â¥i¥H¦h¦â

        myPGBrush.SurroundColors = Colors

        Gr.FillPath(myPGBrush, myPath)

        Dim Gp As Graphics = PictureBox1.CreateGraphics

     Gp.FillPath(myPGBrush, myPath)

21.3.2µeµ§

     µeµ§ª«¥ó¬°¨M©w½u±øÃC¦â(Color)¡B«p«×(Thickness)¡Bµê¹ê½u(Dash style)¡B½u¬qµ²¦X(Joint style)¡BºÝÂI¦¡¼Ë(End cap style)¡Cµeµ§ª«¥ó¥i¥H¨Ï¥Î¹w©wªº280ºØ¤¤µeµ§(¦pPens.Red¡BPensBlue¡BPensBlack¡K¡K.)¡A¹w³]µeµ§µ§¼e¬°1³æ¦ìªº¹ê½u¡A¦p¦]¬°°}¦C¹Bºâ­Pµ§«p¤p©ó1©Îµ¥©ó0¡A«h¨t²Î¤´±Ä¥Î1¡CUser¥i¥HNewÃöÁä¦r¨Ó«Ø¥ßµeµ§¡C¨ä¥Î»y¬°¦p¡G

¦P®É³]©wµ§¦â¤Î¼e«×ªÌ

 

Dim Pen1 as new Pen(Color.Red,2)

©Î

Dim Pen1 as new Pen(Color.Red)

Pen1.Width=2

 

¦p»Ý­n¥t³W½dµeµ§¦¡¼Ë¡A¥i¥H©w¸qÃþ¦ü¦p¤U¡G

Pen1.DashStyle = DashStyle.Dash

¦p»Ý­n¥t³W½dµeµ§ºÝÂI¡A«h¥i¥H¥t©w¸qÃþ¦ü¦p¡G

Pen1.EndCap = LineCap.DiamondAnchor

 

21.3.µe¹Ï¸ô®|

 

µe¹Ï¸ô®|(GraphicsPath)ª«¥ó¥Nªí¥Hª½½u¡B¦±½u¡B¤å¦r¡B¨ä¥L«ü¥O©Î¥]§t¨ä¥Lµe¹Ï¸ô®|ªºª«¥ó¡CGraphicsPath¥i°t¦XAddLine¡BAddEllipse¡BAddRectangle¡BAddRectangles¡B AddCurve ¡BAddBezier¡BAddBeziers¡BAddPath¡B¡Kµ¥Ã¸»s¸ô®|¤èªk¤@»ô¨Ï¥Î¡C

¤U­±ªºµ{¦¡¤ù¬q¡A¬°¨Ï¥ÎAddLine¤ÎAddLinesªº¨Ò¤l¡C

Dim path1, path2 As New GraphicsPath

        Dim tpen As New Pen(Color.Magenta, 6) 'µeµ§

        Dim tbrush As Brush = Brushes.Green 'µ§¨ê

        Dim gp As Graphics = PictureBox1.CreateGraphics

        path1.AddLine(150, 150, 250, 250)

        gp.DrawPath(tpen, path1)

        Dim pts(2) As PointF

        pts(0).X = 150

        pts(0).Y = 160

        pts(1).X = 250

        pts(1).Y = 260

        pts(2).X = 380

        pts(2).Y = 290

        path2.AddLines(pts)

        gp.DrawPath(tpen, path2)

 

¤U­±ªºµ{¦¡¤ù¬q¡A¬°¨Ï¥ÎAddEllipseªº¨Ò¤l¡C

 

Dim path1, path2 As New GraphicsPath

        Dim tpen As New Pen(Color.Magenta, 6) 'µeµ§

        Dim tbrush As Brush = Brushes.Green 'µ§¨ê

        Dim gp As Graphics = PictureBox1.CreateGraphics

        path1.AddEllipse(150, 150, 150, 150)

        path2.AddEllipse(180, 180, 100, 100)

        gp.DrawPath(tpen, path1) 'ªÅ¤ß

        gp.FillPath(tbrush, path2) '¶ñº¡

 

21.4 µe¹Ï¤èªk

21.4.1Obj.CreateGraphics

¦pªG·Q¦bForm(ªí³æ)¡BPictureBox(¹Ï§Î±±¨î¶µ)¡B©Î¦Lªí¾÷(PrintDocunt)¡B¹Ï¤ù(Bitmap)µ¥±±¨î¶µ¤Wø¹Ï¡A¥i§Q¥ÎCreateGraphics¤èªk¡C¨BÆJ¦p¤U¡G
(1)
«Ø¥ßGraphicsø¹Ïª«¥ó¡G

¥ý«Å§i¤@­Óø¹Ï(Graphics)ª«¥ó¡A§@¬°µe¹Ïªº°Ï°ì(Ãþ¦üµe¥¬©Îµe¯È)¡A¨Ã³]©wø¹Ïª«¥óµ¥©ó±±¨î¶µªºCreateGraphics¤èªk¡A¦p¦¹¤~¯à¦b¸Ó±±¨î¶µ¤Wø¹Ï¡C

¤@¯ë«Å§iø¹ÏGraphicsª«¥óªº¤è¦¡¦³¤U¦C´XºØ¡G

 

(a) Dim gr as Graphics=Me.CreateGraphics  ¡¥¥HForm¬°µe¥¬

(b) Dim gp as Graphics=Me.PictureBox1.CreateGraphics  ¡¥¥HPictureBox¬°µe¥¬

(c) Dim bmp as New BitMap(600,800) ¡¥³]©wªÅ¥Õbmpµe¥¬¤j¤p¬°600*800

   Dim gb as Graphics=Graphics.FromImage(bmp) ¡¥¦bbmp¤Wµe¹Ï

(d) Dim img as New Image=System.Drawing.Image.FromFile(¡§c:\Tpt\Test.jpg¡¨)

 ¡¥¸ü¤Jc:\Tpt\Test.jpg ¹ÏÀÉ

   Dim gi as Graphics=Graphics.FromImage(img) ¡¥¦bc:\Tpt\Test.jpg¤Wµe¹Ï

 

(2)©w¸qµ§¨êª«¥ó¡G

  «Ø¥ß©w¸qµ§¨êª«¥ó¡A¨Ã«ü©wµ§¨êªºÃC¦â(Colorµ²ºc)©Î¹Ï®×¯¾¸ô¦¡¼Ëµ¥¡A¦¹©w¸q§¹¦¨ªºµ§¨ê¨Ñ¨BÆJ(4)¨Ï¥Î

(3)©w¸qPenµeµ§ª«¥ó¡G

«Ø¥ß©w¸qµeµ§ª«¥ó¡A¨Ã«ü©wµeµ§ªºÃC¦â(Colorµ²ºc)¡B½u±ø¼e«×¡B½u±ø¦¡¼Ë(µê¡B¹ê½u)¡BºÝ¸`ÂI¼Ë¦¡µ¥¡A©w¸q§¹¦¨ªºµe¹Ïª«¥ó±N´£¨Ñ¨BÆJ(4)¨Ï¥Î¡C

(4)©w¸qGraphicsªº¤èªk¡G

¨Ìµe¹Ï¼Ë¦¡¤£¦P¡A¦pª½½u¡B¾ò(¶ê)¡B¯x(¤è)¡B¾ò¶ê(¶ê)©·¡Kµ¥¡A¨Ó©I¥sGraphicsÃþ§OªºDrawLine¡BDrawLines¡BDrawEllipse¡BDrawRectangle¡BDrawArc¡BDrawPie¡BDrawCurve¡BDrawClosedCurve¡B¡Kµ¥¤£¦P¤èªk¡C«e­z¦U¤èªk¤j¦P¤p²§¡A¦]¦¹¥»¸`¶È¤¶²Ð¨ä¤¤´XºØ¡A¨ä¾l½Ð°Ñ¦Òªþ¿ýªºµ{¦¡½X¡C

(4)µe§¹¹Ï«á¡A¥²­n®ÉÀ³©ß±óÄÀ©ñGraphicsø¹Ïª«¥ó¡C

  

¬°¤è«KŪªÌ¼ô±xªí³æ¤ÎPictureBoxø¹Ï¤è¦¡¤§®t²§¡A§Ú­Ì©Ò±Ä¥Îªº¤ù¬qµ{¦¡½X¡A¦h±Ä¥Î¨âªÌ¦X¨Ö¤è¦¡§e²{¡C

 

'ªí³æµe½u

        Dim gr As Graphics

        gr = Me.CreateGraphics '«Å§i grµe¹Ïª«¥ó    

        Dim myPen1 As Pen = New Pen(Color.Red)          '«Å§i myPen1µeµ§¹Ïª«¥ó

        gr.DrawLine(myPen1, 58, 60, 130, 120)            '¨Ï¥Îµe½u¤èªk

        '¹Ï§Î¤è¶ôµe½u

        Dim gp As Graphics

        gp = PictureBox1.CreateGraphics '«Å§i gpµe¹Ïª«¥ó

        Dim myPen2 As Pen = New Pen(Color.Red)          '«Å§i myPenµeµ§¹Ïª«¥ó

        gp.DrawLine(myPen2, 58, 60, 130, 120)            '¨Ï¥Îµe½u¤èªk

 

¤W­zµ{§Ç½X¤¤gr¬O¥Hªí³æ¬°µe¹Ïª«¥ó¡Fgp¬O¥HPictureBox¬°µe¹Ïª«¥ó¡C¹w³]µ§¼e¬°1¡A¦pµ§¼e¨ú¤p©ó1©Îµ¥©ó0¡A«h¨t²Î·|¦Û°Ê§ï¥Î1¡C¤W­zµ{§Ç½X¡A¦p§ï¥HÂIµ²ºcªí¥Ü¡A¥Bµ§¼e¬°2 Pixels¡A¼Ë¦¡¬°µê½u¡A¥i¥H§ï¼g¦¨¡G

 

Dim gr As Graphics

        gr = Me.CreateGraphics '«Å§i gpµe¹Ïª«¥ó    

        Dim myPen1 As Pen = New Pen(Color.Red)          '«Å§i myPenµeµ§¹Ïª«¥ó

        myPen1.Width=2     ¡¥µ§¼e

myPen2.DashStyle = DashStyle.Dash ¡¥½u±ø¼Ë¦¡

        gr.DrawLine(myPen1, New point(58, 60), New(130, 120) )     '¨Ï¥Îµe½u¤èªk

©Î

       Dim pt1 As New Point(58,60)

       Dim Pt2 As New point(130,120)

myPen2.DashStyle = DashStyle.Dash

gr.DrawLine(New Pen(Color.Red,2), pt1,pt2 )  '¤ñµ§¼e2

 

 

¤U­±§Ú­Ì¦AÁ|¤@­Óµe¦±½u¨Ò¤l¡G

Dim tpen As New Pen(Color.Magenta, 2) 'µeµ§

        Dim gp As Graphics = PictureBox1.CreateGraphics

        Dim pts(4) As PointF

        pts(0).X = 50

        pts(0).Y = 60

        pts(1).X = 150

        pts(1).Y = 160

        pts(2).X = 280

        pts(2).Y = 190

        pts(3).X = 90

        pts(3).Y = 120

        pts(4).X = 80

        pts(4).Y = 90

        gp.DrawCurve(tpen, pts)

        Dim gr As Graphics = CreateGraphics()

        gr.DrawCurve(tpen, pts)

 

 

 

¤W­zµ{¦¡½X¦p±NDrawCurve§ï¬°gr.DrawClosedCurve(tpen, pts)¡A«h©Òø»s¦±½u´NÅܦ¨

³¬¦X¦±½u¡CVB .NET©Ò´£¨Ñªº¦±½u»P¯u¥¿ªºSpline¦±½u¨Ã¤£¤Q¤À§k¦X¡C

 

 

 

¤U­±¬°Ã¸»sDrawStringªºµ{¦¡½X¤Î°õ¦æ«á¦¨ªGµe­±¡C

 

Dim gr As Graphics = Me.CreateGraphics

        Dim gp As Graphics = PictureBox1.CreateGraphics

        Dim mybrush As Brush = Brushes.Orange

 

        Dim myfont As Font = New Font("·s©ú²Ó¹Ï", 50)

        gr.DrawString("·s¦~§Ö¼Ö", myfont, mybrush, 5, 4

gp.DrawString("·s¦~§Ö¼Ö", myfont, mybrush, 5, 45)

 

 

21.4.2 Paint¨Æ¥óø¹Ï

°£¤F§Q¥Î±±¨î¶µªºCreateGraphics¤èªk¨Óø¹Ï¥~¡A¤]¥i¥H§Q¥Î±±¨î¶µªºPaint¨Æ¥ó¡C

Paint¨Æ¥óe¬° System.Windows.Forms.PaintEventArgsªº¤Þ¼Æ¡A¨ä¥iª½±µ¥Î¨Ó§@¬°ªí³æ©ÎPictureBoxø¹Ï¡A¦]¬°¨ä³Q«Å§i¬°PaintEventArgsÃþ§O¡A¥u­n¦³¦s¨úPaintEventArgsÃþ§OªºGraphicsÄÝ©Ê¡A§Y¥iø¹Ï¡Cø§¹¹Ï«á¤]¤£¥²¨Ï¥ÎDispose()ÄÀ©ñµeµ§©Îµ§¨ê¡C±Nµe¹Ï¤èªk¼g¦bForm1_Paint()©ÎPictureBox1_Paintµ{¦¡¤¤¡A¨âªÌ°£Sub¦WºÙ¤£¦P¥~¡A¤º®e¬Û¦P¡A¦bªí³æ©ÎPictureBox³Q¾B»\©Î©ñ¤jÁY¤p®É³£·|¦Û°Ê­«Ã¸(»PVB 6.0¤¤³]©wAutoRedraw=True)¬Û·í¡C


Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

                                                   

        Dim myPen1 As Pen = New Pen(Color.Red)          '«Å§i myPenµeµ§¹Ïª«¥ó

        myPen1.Width=2     ¡¥µ§¼e

myPen2.DashStyle = DashStyle.Dash ¡¥½u±ø¼Ë¦¡

        e.graphics.DrawLine(myPen1, New point(58, 60), New Point(130, 120) )  '¨Ï¥Îµe½u¤èªk

©Î

Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

                                                   

        Dim myPen1 As Pen = New Pen(Color.Red)          '«Å§i myPenµeµ§¹Ïª«¥ó

        myPen1.Width=2     ¡¥µ§¼e

myPen2.DashStyle = DashStyle.Dash ¡¥½u±ø¼Ë¦¡

        e.graphics.DrawLine(myPen1, New point(58, 60), New Point(130, 120) )  '¨Ï¥Îµe½u¤èªk

End Sub

21.4.3ø»s°Ï°ì

°Ï°ì(Region)¦pªG­n»s§@¤ñ¸û½ÆÂøªº¹Ï§Î¡A¥i¨Ï¥Î°Ï°ì(Region)ª«¥ó¡A·f°t¨äÁp¶°(Union)¡B¥æ¶°(Intersect)¡B¥¼­«Å|(Xor)¡B°£¥~(Exclude)¡B¡Kµ¥¤èªk¡A¨Ó»s§@¦hºØ´X¦óªº¹Ï§Î¡C¤U­±¬°°Ï°ì1(¯x§Î)¤Î°Ï°ì2(¾ò¶ê§Î)¨â¥æ¶°°Ï°ì¤§µ{¦¡½X¤Î¦¨ªGµe­±¡C

 

Dim Path1, Path2 As New GraphicsPath

        Dim Region1, Region2 As Region

        Dim gr As Graphics = Me.CreateGraphics

        Dim gp As Graphics

        gp = PictureBox1.CreateGraphics

        Dim rect1 As Rectangle = New Rectangle(150, 150, 100, 100)

        gr.DrawRectangle(Pens.Red, rect1)

        gp.DrawRectangle(Pens.Red, rect1)

        Path1.AddRectangle(New Rectangle(150, 150, 100, 150)) '¯x§Î

        Path2.AddEllipse(150, 150, 130, 70) '¾ò¶ê§Î

        gp.DrawEllipse(Pens.Green, 150, 150, 130, 70) '¾ò¶ê§Î

        region1 = New Region(path1)

        region2 = New Region(path2)

        'µÛ­n³]©w¨â°Ï°ì­«Å|Åã¥Ü¤èªk¡C±N¬õ¦âø¹ÏÅã¥Ü©óªí³æ¤¤¡A¼g¦¨¡G

 

        Dim tbrush As Brush = Brushes.Blue '²£¥ÍÂŦⵧ¨ê

        Region2.Intersect(Region1)

        gr.FillRegion(tbrush, Region2)

        gp.FillRegion(tbrush, Region2)

 

 

    ¤U­±¬°¬°°Ï°ì2(¾ò¶ê§Î)¤Î°Ï°ì1(¯x§Î)¨â°Ï°ì¸g¹LXor¹Bºâ¡A°Ï°ì2³Ñ¾l°Ï°ì¤§µ{

¦¡½X¤Î¦¨ªGµe­±¡C¨ä¾l°Ï°ì¹Bºâµ{¦¡½X¼gªk¦h¤j¦P¤p²§¡A½Ð°Ñ¦Òªþ¿ý¤§µ{§Ç½X¡C

 

Dim Path1, Path2 As New GraphicsPath

        Dim Region1, Region2 As Region

        Dim Gr As Graphics = Me.CreateGraphics '¥Hªí³æ¬°Ã¸¹Ïª«¥ó(ø¹Ï°Ï)

        Dim gp As Graphics

        gp = PictureBox1.CreateGraphics

        Dim rect1 As Rectangle = New Rectangle(150, 150, 100, 100)

        Gr.DrawRectangle(Pens.Red, rect1)

        gp.DrawRectangle(Pens.Red, rect1)

        Path1.AddRectangle(New Rectangle(150, 150, 100, 150)) '¯x§Î

        Path2.AddEllipse(150, 150, 130, 70) '¾ò¶ê§Î

        Gr.DrawEllipse(Pens.Green, 150, 150, 130, 70) '¾ò¶ê§Î

        gp.DrawEllipse(Pens.Green, 150, 150, 130, 70) '¾ò¶ê§Î

        Region1 = New Region(Path1)

        Region2 = New Region(Path2)

        'µÛ­n³]©w¨â°Ï°ì­«Å|Åã¥Ü¤èªk¡C±N¬õ¦âø¹ÏÅã¥Ü©óªí³æ¤¤¡A¼g¦¨¡G

 

        Dim tbrush As Brush = Brushes.Blue '²£¥ÍÂŦⵧ¨ê

        Region2.Xor(Region1)

        Gr.FillRegion(tbrush, Region2)

        gp.FillRegion(tbrush, Region2)

 

 

21.4.ø»s¦r¦ê¸ô®|

ø»s¦r¦ê(DrawString)¤è©Ò¨Ï¥Î¨ìªº¤Þ¼Æ¸û¦h¡A¨Ï¥Î¤W¦ü¥G¤ñ¸û³Â·Ð¨Ç¡A«e­±§Ú­Ì´¿¤¶²Ð¤@¯ë¦r¦êªºµ{§Ç½X¼gªk¡A¦¹³B§Ú¥t¤¶²Ð¦r¦ê¸ô®|(ªÅ¤ß¦r¦ê)ªºµ{¦¡½X¼gªk¡G

¤U­±«h¬°DrawPath(String) ªºµ{¦¡½X¤Î°õ¦æ«á¦¨ªGµe­±¡C

 

Dim gr As Graphics = Me.CreateGraphics

        Dim gp As Graphics = PictureBox1.CreateGraphics

 

        Dim txt As String = "VB"  'ªÅ¤ß¦rÅé

        Dim filename As String

        If dlgOpenDigFile.ShowDialog() = DialogResult.OK Then '¸ü¤J¶ñ¥RªÅ¤ß¦rÅ骺¹ÏÀÉ

            filename = dlgOpenDigFile.FileName

        End If

        '¸ü¤JÂI°}¹Ï

        Dim myBmp As New Bitmap(filename)

        Using graphics_path As New GraphicsPath()  '¨Ï¥ÎgraphicsPathÃþ§O

            graphics_path.AddString(txt, _         '¥[¤J¦r¦ê

            New FontFamily("Times New Roman"), _   '¨Ï¥Î"Times New Roman"¦rÅé

            FontStyle.Bold, 200, _                 '¦rÅé¼Ë¦¡,¤Ø¤o

            New Point(0, 140), _                   '¦rÅé¶}©l¦ì¸m

            New StringFormat)                      '¦rÅé®æ¦¡

            Using tBrush As New TextureBrush(myBmp)  '§Q¥Î¯¾²zµ§¨ê

                gr.FillPath(tBrush, graphics_path)   '¥HtBrush¶KçE¸ô®|¤º³¡

                gp.FillPath(tBrush, graphics_path)

            End Using

            gr.DrawPath(Pens.Red, graphics_path)     '¶ñ¥R¸ô®|¥~®Ø

            gp.DrawPath(Pens.Red, graphics_path)

        End Using

 

¤U­±¬°¦r¦ê±ÛÂधµ{§Ç½X¼gªk±ÛÂà135¢X«á¦¨ªGµe­±¡C

 

Dim gr As Graphics = Me.CreateGraphics

        Dim gp As Graphics = PictureBox1.CreateGraphics

        Dim rect_wid As Integer = Me.ClientSize.Width - 760 ' ¦r¦ê¥~®Ø¼e

        Dim rect_hgt As Integer = Me.ClientSize.Height - 360 ' ¦r¦ê¥~®Ø°ª

        Dim layout_rect As New RectangleF( _

            (Me.ClientSize.Width - rect_wid) \ 4, _

            (Me.ClientSize.Height - rect_hgt) \ 4, _

            rect_wid, rect_hgt)

        '©w¸q¦r¦ê¤Î¦rÅé.

        Dim txt As String = "±z¦n!"

        Using the_font As New Font("²Ó©úÅé", 60, FontStyle.Bold, GraphicsUnit.Pixel)

         Dim tAng As Single = InputBox("½Ð¿é¤J±ÛÂਤ«×(Deg)", "±ÛÂਤ«×", "30") ¡¥¿é¤J±ÛÂਤ«×

            ' ³]©w¤å¦r¹ï»ô®æ¦¡.

            Using string_format As New StringFormat

                string_format.Alignment = StringAlignment.Center

                string_format.LineAlignment = StringAlignment.Center

 

                ' ¥­²¾(-ClientSize.Width \ 4,-Me.ClientSize.Height \ 4),±ÛÂàtAng«×,«á²¾¦^.

                gr.TranslateTransform(-Me.ClientSize.Width \ 4, -Me.ClientSize.Height \ 4, MatrixOrder.Append)

                gr.RotateTransform(tAng, MatrixOrder.Append)

                gr.TranslateTransform(Me.ClientSize.Width \ 4, Me.ClientSize.Height \ 4, MatrixOrder.Append)

 

                ' ø»s¤å¦r¤Î¥~®Ø.

                gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit

                gr.DrawString(txt, the_font, Brushes.Blue, layout_rect, string_format)

                gr.DrawRectangle(Pens.Magenta, Rectangle.Round(layout_rect))

                ¥­²¾(-ClientSize.Width \ 4,-Me.ClientSize.Height \ 4),±ÛÂàtAng«×,«á²¾¦^.

                gp.TranslateTransform(-Me.ClientSize.Width \ 4, -Me.ClientSize.Height \ 4, MatrixOrder.Append)

                gp.RotateTransform(tAng, MatrixOrder.Append)

                gp.TranslateTransform(Me.ClientSize.Width \ 4, Me.ClientSize.Height \ 4, MatrixOrder.Append)

 

                ' ' ø»s¤å¦r¤Î¥~®Ø.

                gp.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit

                gp.DrawString(txt, the_font, Brushes.Green, layout_rect, string_format)

                gp.DrawRectangle(Pens.Blue, Rectangle.Round(layout_rect))

            End Using

        End Using

'     



¡@

    ¤W­zµ{§Ç½X¤¤­n¨Ï¥Î¨ìTranslateTransform()»PRotateTransform()¡A¦³Ãö¦¹³¡¥÷¤§¸Ñ»¡¡A§Ú­Ì·|«á­±¸`¥t¥~»¡©ú¡C

 

21.5 ¼v¹³³B²z

 

¼v¹³³B²z(Image processing)ªºImage¡A¬O¤@­Ó¤ñ¸û©â¶HªºÃþ§O¡A¦]¨äÄÝ©â¶HÃþ§O¥²¶·ÂǥѨä­l¥ÍÃþ§O¦pÂI°}¹Ï(Bitmap)©Î¦V¶q¹Ï(MetaFile)ª«¥ó¹ê§@¡C¤£½×¬OÂI°}¹Ï©Î¦V¶q¹Ï³£ÄݳB²z¸ê®Æµ²ºc¸û§C¼h¦¸ªºª«¥ó¡AÂI°}¹Ïª«¥ó¥HÂ^¨ú½Ñ¦pDrawLine¡BDrawEllipseµe¹Ï¤èªk¤¤¹³¯À¸ê®Æ¦bªí³æ©Î¹Ï§Î¤è¶ôÅã¥Ü¹Ï§Î©ÎÀx¦s¦¨Àɮ׸ê®Æ(Àx¦s¬Û¯À¸ê®Æ)¡F¦Ó¦V¶q¹Ï«hÂ^¨úµe¹Ï¸ê®ÆÅܦ¨¥i¥HÀH®É¥i¥H¦bµe¹Ï°Ï°ì¦A¦¸Åã¥Ü¤§¦V¶q¹Ï¸ê®Æ(Àx¦sµe¹Ï«ü¥O)¡C

21.5.1¼v¹³

¼v¹³(Image)¬°Ã¸»s¡B½Æ»s¡BÂà´«¡Bª«¥ó¤Î®i¥Ü¥Î¹Ï¤ù(Picture)¡A¨äÄÝ©â¶HÃþ§O¡A¥²¶·³z¹L¨ä­l¥ÍÃþ§O¦pÂI°}¹Ï(Bitmap)©Î¦V¶q¹Ï(MetaFile)ª«¥ó¥H«Ø¥ß¹êÅ骫¥ó¡C

¦p¤U­±¤ù¬qµ{¦¡´N¬O«Ø¥ßÂI°}¹Ïªº¨Ò¤l¡G

 

Dim bmp As New Bitmap(200, 200)

        Using gr As Graphics = Graphics.FromImage(bmp)

            gr.DrawEllipse(Pens.Blue, 20, 20, 120, 160)

        End Using

 

21.5.2ÂI°}¹Ï

ÂI°}¹Ï(Bitmap)¬O¥H¹³¯À¸ê®Æ©w¸qªºÃþ§O¡AUser¥i¥H¥Î³o¨Ç¸ê®Æ¹Bºâ¡B­×¥¿¡BÀx¦s¹Ï¹³µ¥³B²z§@·~¡A³o¨Ç¸ê®Æ¥i¥H¦bªí³æ¡B¹Ï§Î¤è¶ô¡B±±¨î¶µÅã¥Ü¡AÂI°}¹Ï¥iÂà¦s¬°Bmp¡BGif¡BJpeg¡BPng¡BTiffµ¥Ãþ«¬ÀɮסCÂI°}¹Ï«Ü¦h­«­nªºÄÝ©Ê¡B¤èªk¦h¬OÄ~©Ó¦ÛImage©â¶HÃþ§O¡C

 

(1)    Àx¦s¹ÏÀÉ¡G

ÂI°}¹Ï¥i¥H¥Hª«¥óÀx¦s¦¨ÀɮסAÂI°}¹ÏÀx¦s¹w³]Àɮ׮榡¬°Png®æ¦¡¡A¦]¦¹¦pÀx¦s¦¨PngÀÉ¥u»Ý­n¿é¤JÀɦW¡A¨ä¾l®æ¦¡«hÀ³¥t¿é¤J®æ¦¡¦WºÙ¡C¤U­±¤§µ{¦¡½X¬°¥ý¦bªí³æ¤Wµe¹Ï«á¡A¦A§Q¥ÎÀÉ®×Àx¦s¹ï¸Ü¤è¶ô(SaveFileDialog)¤¤¿é¤J±ýÀx¦sªº¹ÏÀɦWºÙ(***)¡A¤À§OÀx¦s¦¨***.bmp¡B***.jpg¡B***.gif®æ¦¡¹ÏÀÉ¡C

 

'«Ø¥ß¦p¹Ï§Î¤è¶ôPicturebox1¤j¤pªºÂI°}¹Ïª«¥ó

        Dim Filename As String

        Dim myBmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)

        ' «Ø¥ßø¹Ïª«¥ó.

        Dim gr As Graphics = Graphics.FromImage(myBmp)

        ' ¦bø¹Ïª«¥ó¤Wø¹Ï.

        gr.FillRectangle( _

            New SolidBrush(Color.LightGreen), _

            0, 0, Me.ClientSize.Width, Me.ClientSize.Height)

        '«Ø¥ß¯x§Îª«¥ó

        Dim rect As New Rectangle(5, 5, _

            myBmp.Width - 10, myBmp.Height - 10)

        gr.FillEllipse( _

            New HatchBrush(HatchStyle.LightDownwardDiagonal, _

                Color.Black, Color.Yellow), _

                rect)

        gr.DrawEllipse(New Pen(Color.Blue, 3), rect)

        ' Åã¥Üµ²ªG.

        PictureBox1.Image = myBmp

          myBmp = PictureBox1.Image

        If dlgSaveDigFile.ShowDialog() = DialogResult.OK Then

            Filename = dlgSaveDigFile.FileName

        End If

        ' Àx¦s¦¨bitmap, JPEG, GIF®æ¦¡.

        myBmp.Save(Filename & ".bmp", System.Drawing.Imaging.ImageFormat.Bmp)

        myBmp.Save(Filename & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

        myBmp.Save(Filename & ".gif", System.Drawing.Imaging.ImageFormat.Gif)

        MsgBox("Ok")

 

(2)¸ü¤J¹ÏÀÉ¡G

  

¸ü¤J¹ÏÀÉ»PÀx¦s¹ÏÀɧ@·~¤è¦¡Ãþ¦ü¡A¥i¥H§Q¥ÎÀɮ׶}±Ò¹ï¸Ü¤è¶ô(OpenFileDialog)¸ü¤J»Ý­nªºÀɮסC¦³Ãöµ{¦¡½Xªº½s¼g¦p¤U©Ò­z¡G

 

        Dim filename As String

        If dlgOpenDigFile.ShowDialog() = DialogResult.OK Then

            filename = dlgOpenDigFile.FileName

        End If

        '¸ü¤JÂI°}¹Ï

        Dim mybmp As New Bitmap(filename)

        ' Åã¥Ü¦¨ªG.

        PictureBox1.Image = mybmp

       PictureBox1.SizeMode = PictureBoxSizeMode.Normal

 

 

21.5.3¹³¯À³B²z

 ÂI°}¹Ï´£¨Ñ¨âºØ¹³¯Àªº³B²z¤èªk¡G(1)Â^¨ú¹³¯À(GetPixel)¡A¤Î(2)§G³]¹³¯À(SetPixel)

¨âºØ¤èªk§@¬°¹³¯À¹Bºâ³B²zªº§@·~°ò¦¡CGetPixel»PSetPixel§@·~§¡¶·¦bBitMap°O¾ÐÅ餤³B²z¡A¹Bºâ³B²z§¹¦¨«á¦AÂÇ¥ÑForm©ÎPictureBox¨ÓÅã¥Ü§@·~µ²ªG¡AµLªkª½±µ¦bForm©ÎPictureBox¤W§@·~¡C¦p»Ýª½±µ¦bForm©ÎPictureBox¤£³z¹LForm©ÎPictureBox«h¥i¥HÂÇWindow Api¨Ó§¹¦¨¡C¤U­±¤§¤ù¬qµ{¦¡½X¬°¨å«¬ªºGetPixel»PSetPixel§@·~¤è¦¡¡C

 

Dim clr As Integer

        Dim xmax As Integer

        Dim ymax As Integer

        Dim x As Integer

        Dim y As Integer

        ' ¨ú±oÂI°}¹Ï¤Î¤Ø¤o.

        Dim yans As Integer = MsgBox("¬O§_¨ú±oÂI°}¹Ï(*.Bmp)?", MsgBoxStyle.YesNo)

        If yans = 7 Then

            MsgBox("½Ð¸ü¤J¹ÏÀÉ«á­«¨Ó")

            Exit Sub

        End If

        Dim mybmp As Bitmap = PictureBox1.Image

        xmax = mybmp.Width - 1

        ymax = mybmp.Height - 1

        ' Âà´«¦¨¦Ç¶¥¹Ï¤ù.

        For y = 0 To ymax

            For x = 0 To xmax

                With mybmp.GetPixel(x, y)  ¡¥Â^¨ú¹³¯À

                    clr = 0.3 * .R + 0.5 * .G + 0.2 * .B

                End With

                mybmp.SetPixel(x, y, _

                    Color.FromArgb(255, clr, clr, clr)) ¡¥¾Q³]¹³¯À

            Next x

        Next y

        ' Åã¥Ü¹Ï¤ù.

PictureBox1.Image = mybmp

 

 

 

¤U­±ªº¤ù¬qµ{¦¡½X¬°ª½±µ¦bForm©ÎPictureBox¤W§Q¥ÎApi¨ç¼Æ¡Aª½±µÂ^¨ú¹³¯À¤Î§G³]¹³¯Àªº§@·~¤è¦¡¡C

 

Private Shared Function GetDC(ByVal hwnd As IntPtr) As IntPtr

    End Function

    Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As IntPtr, ByVal X As Int32, ByVal Y As Int32) As Int32

Private Declare Function SetPixel Lib "gdi32" Alias "SetPixel" (ByVal hdc As IntPtr, ByVal X As Int32, ByVal Y As Int32, ByVal crColor As Int32) As Int32

Private Shared Function ReleaseDC(ByVal hWnd As IntPtr, ByVal hDC As IntPtr) As Integer

Dim lngPtcolor As Long

 

        Dim gp1 As Graphics = PictureBox1.CreateGraphics

        Dim hdc1 As IntPtr = gp1.GetHdc()

        Dim lngsetcolor As Integer

        For i As Integer = 0 To PictureBox1.Width - 1

            For j As Integer = 0 To PictureBox1.Height - 1

                lngPtcolor = GetPixel(hdc1, i, j)

                SetPixel(hdc1, i, j, lngPtcolor)

            Next j

        Next i

        ReleaseDC(IntPtr.Zero, hdc1)  '±NDC ÄÀ©ñ

End sub

 

VB.NET¤¤¥i¨Ï¥ÎGraphicsÃþ§OªºDrawImage¤èªkÅã¥Ü¹Ï§ÎÀÉ¡A¦b¤£¦P®É¶¡¶¡¹j¤£¦Pªº¦ì¸mÅã¥Ü¦P¤@¹Ï§ÎÀÉ·|²£¥Íµøı¤Wªº°Êµe®ÄªG¡CDrawImage¤èªk¥i«ü©w¥ØªºÃ¸¹Ï°Ï¡A¤]¥i«ü©w¨Ó·½¹Ï¤ùªºÅã¥Ü½d³ò¡A¨ã³Æ¦Û°ÊÁY©ñ¥\¯à¡A·|¦Û°Ê±N¹Ï¤ù©ñ¤j©ÎÁY¤p¥H¶ñ¥R«ü©wªº¾ã­Óø¹Ï°Ï°ì¡A¨ä¨Ï¥Î»yªk¦³¡G

 

DrawImage(Imageª«¥ó¡Ax,y)

DrawImage(Imageª«¥ó¡APointµ²ºc)

DrawImage(Imageª«¥ó¡A¥ØªºRectangleµ²ºc)

DrawImage(Imageª«¥ó¡Ax,y¡A¨Ó·½Rectangleµ²ºc¡A¹Ï§Î³æ¦ì)

DrawImage(Imageª«¥ó¡A¥ØªºRectangleµ²ºc¡A¨Ó·½Rectangleµ²ºc¡A¹Ï§Î³æ¦ì)

 

¤U­±¬°§Q¥ÎDrawImage¤èªk©Ò»s§@ªºÂ²³æ°Êµe¤pºëÆF¡AÂÇ¥|­Ó¦³¤£¦Pªº¶}¤f¾ò¶ê¡A¤G­Ó¤p¶ê¥Nªí¤pºëÆF¤f¤¤¤p¦ä¤Î²´·ú¡A§Q¥Î­p®É¾¹¨C100²@¬í¥H§ïÅܤpºëÆF¦ì¸m(x.y­È)²£¥Í°Êµe®ÄªG¡C

 

 

 

'­º¥ý¦bForm1Ãþ¤¤©w¸qÅܼơAµ{§Ç¿Â¦p¤U¡C

    Dim iRepeat As Integer

    Dim x, y, wid, ht As Integer

    Dim angBeg(3) As Integer

    Dim angEnd(3) As Integer

    Dim gp As Graphics

    Dim ncount As Integer = 0

 

    'Form1ªºLoad¨Æ¥ó½s¼gµ{§Ç¿Â¡A³]¸mªì©l­È¡Aµ{§Ç¿Â¦p¤U©Ò¥Ü¡C

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

        gp = PicCanvas.CreateGraphics

        x = PicCanvas.Width - 10 : y = 10 : wid = 55 : ht = 50 '¶}©l®É¤pºëÆF¦ì¸m

        angBeg(0) = 130 '²Ä¤@­Ó¹Ïªº°_©l¨¤«×

        angEnd(0) = -250 '²Ä¤@­Ó¹Ïªºµ²§ô¨¤«×

        angBeg(1) = 150 '²Ä¤G­Ó¹Ïªº°_©l¨¤«×

        angEnd(1) = -280 '²Ä¤T­Ó¹Ïªºµ²§ô¨¤«×

        angBeg(2) = 180  '²Ä¤T­Ó¹Ïªº°_©l¨¤«×

        angEnd(2) = -315 '²Ä¤T­Ó¹Ïªºµ²§ô¨¤«×

        angBeg(3) = 200 '²Ä¥|­Ó¹Ïªº°_©l¨¤«×

        angEnd(3) = -350 '²Ä¥|­Ó¹Ïªºµ²§ô¨¤«×

        iRepeat = 0

        Timer1.Enabled = False

    End Sub

    '¬°Timer±±¨î¶µªºTick¨Æ¥ó½s¼gµ{§Ç½X¡A¦b¤£¦Pªº®É¶¡¶¡¹jùة󤣷|¦ì¸mø»s¤£¦P¯Ê¤fªº®°§Î¡A¨Ã¥B¤@ª½±q¥k©¹¥ª°j°é¹B°Êª½¨ì°±¤î¹B¦æ

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        gp.Clear(PicCanvas.BackColor)

        gp.FillEllipse(Brushes.Red, x + 10, y + 15, 10, 10)  '¤pºëÆF¤f¤¤­¸¦æ¤p¦ä

        gp.FillPie(Brushes.Green, x, y, wid, ht, angBeg(iRepeat), angEnd(iRepeat))

        gp.FillEllipse(Brushes.White, x + 35, y + 18, 10, 10)   '¤pºëÆF²´·ú

        iRepeat = iRepeat + 1

        If iRepeat > 3 Then iRepeat = 0

        x = x - 10 'ÅܤƮy¼Ð¦ì¸m

        y = y + ncount * 2

        If x < 10 Then

            x = PicCanvas.Width - 10

            ncount = ncount + 1

        End If

        If y > PicCanvas.Height - 30 Then

            y = 10

            ncount = 0

        End If

    End Sub

 

21.5.4½u©ÊÂà´«

§Ú­Ì¦b¥»®Ñ²Ä¤@³¹´N¤¶²Ð¹L½u©Ê¤èµ{²Õ¤Î¯x°}ªºÆ[©À¡A.±z¹ï¼Æ¾Ç¤£«ç»ò·P¿³½ì¡A¤]¨SÃö«Y¡C¦bGDI+µ{¦¡¤¤¡A±z¥i¥H§â¥¦·í§@¬O¤@¯ëª«¥ó¡A¨Ã¥B¨Ï¥Î¥¦­ÌªºÄÝ©Ê©M¤èªk¹³¨ä¥Lª«¥ó¤@¼Ë¡CVB .NET´£¨Ñ¦³Multiply¡BRotate¡BRotateAt¡BScale¡BShear ©M Translateµ¥¯x°}¤èªk¡CVB .NET¥Î¨Óªí¥Ü¥é®gÂà´«ªº¯x°}²Ä¤T­Ó¸ê®Æ¦æ(Column)¥Ã»·¬° (0, 0, 1)¡A¦]¦¹¦b«Ø¥ß Matrix ª«¥ó®É¡A±z¥u»Ý­n«ü©w«e¨â­Ó¸ê®Æ¦æ¤¤ªº¤»­Ó¼Æ¦r¡C¨Ï¥ÎMatrixª«¥ó²Ä¤@¥ó¨Æ´N¬O«Ø¥ßMatrixª«¥ó«á¤è¯à§@½u©ÊÂà´«¡A¦³®É­Ô¡A¦b¯u¹êªºµ{¦¡¥@¬É¸Ì¡A§Ú­Ì¥i¯à»Ý­n­pºâÂà´«¯x°}¤¤¦U§O¤¸¯À¡C¦p¤U­±ªº¤ù¬qµ{¦¡¡G

 

Dim myMatrix As Matrix =  New Matrix(1, 0, 0, 2, 0, 0) ¡¥¤»­Ó¼Æ¦r©Ò¥Nªíªº¯x°}
myMatrix.Scale(2, 2) ¡¥
¤ñ¨ÒÂà´«

¡¦«Ø¥ß¤@­Óµe¹Ïª«¥ó¡A¤Î¤@­Ó¶Â¦â¯x§Î
Dim Gp as Graphics = PictureBox1.CreateGraphics

Dim Rect As Rectangle = New Rectangle(20, 20, 40, 60)

Gp.DrawRectangle(Pens.Black, Rect)

¡¦¥HmyMatrix¬°¤Þ¼Æ¡A§@¬°¯x°}¤§½u©ÊÂà´«

Gp.MultiplyTransform(myMatrix, MatrixOrder.Append)

Gp.DrawRectangle(Pens.Orange, Rect)

 

§Ú­Ì¥²¶·¦A¦Ò¼{®y¼Ð¨t²ÎªºÆ[©À¡A¦bGDI+µe¹Ï§@·~¤¤¡A¥@¬É¨t²Î®y¼Ð(world coordinates)¥²¶·Âà´«¦¨­¶­±®y¼Ð(page coordinates)¡AµM«á³]³Æ®y¼Ð(device coordinates)¡C¤W­zªºMultiplyTransform¯x°}¤èªk¥u¬O¹ïµe¹Ïª«¥ó¶i¦æÂà´«¦Ó«D¹ï¯x§Î§@Âà´«¡C¥t¤@¤è­±¡A§Ú­Ì¥²¶·¦Ò¼{¨ì¡A¯x°}Âà´«¦¸§Ç¡A¦b¤@¯ë¼Æ¾Ç¹BºâA *B»PB *A¬O¬Ûµ¥ªº¡C¦ý¹ï¯x°}¤§¹Bºâ¡A¦¸§Ç¬O«Ü­«­n¡A¦p¤U­±¤§¹Bºâ

 

gp.TranslateTransform(-70, 35, MatrixOrder.Append)

        gp.RotateTransform(30, MatrixOrder.Append)

        gp.TranslateTransform(186, 75, MatrixOrder.Append)

    gp.ScaleTransform(2.25F, 0.5F, MatrixOrder.Append)

»P

gp.TranslateTransform(-70, 35, MatrixOrder.Prepend)

        gp.RotateTransform(30, MatrixOrder.Prepend)

        gp.TranslateTransform(186, 75, MatrixOrder.Prepend)

    gp.ScaleTransform(2.25F, 0.5F, MatrixOrder.Prepend)


¹Bºâµ²ªG¬O¤£¤@¼Ëªº¡C

¡@

¯x°}Âà´«¦³©Ò¿×°Ï°ìÂà´«¤Î¥þ°ìÂà´«¨âºØ¡A¥þ°ìÂà´«·|®M¥Î¦Ü¯S©wGraphicsª«¥óø»sªº©Ò¦³¶µ¥Ø¡F¬Û¹ï¦a¡A°Ï°ìÂà´«¥u®M¥Î¦Ü­nø»sªº¯S©w¶µ¥Ø¡C

¦pªG­n«Ø¥ß¥þ°ìÂà´«¡AÀ³¥ý«ØºcGraphicsª«¥ó¡AµM«áºÞ²zTransformÄÝ©Ê¡CTransform ÄݩʬO¤@­Ó Matrix ª«¥ó¡A¦]¦¹¥¦¥i¥H¦s©ñ¥é®gÂà´«ªº¥ô¦ó§Ç¦C¡CÀx¦s¦bTransformÄݩʪºÂà´«¤SºÙ¬°¥þ§½Âà´«¡CGraphicsÃþ§O´£¨Ñ´X­Ó¤èªk¡A¥Î¨Ó«Ø¸m½Æ¦Xªº¥þ§½Âà´«¡GMultiplyTransform¡BRotateTransform¡BScaleTransform©MTranslateTransform¡C¤U¦C½d¨Ò·|ø»s¨â¦¸¾ò¶ê§Î¡G¤@¦¸¬O¦b«Ø¥ß¥þ§½Âà´«¤§«e¡A¤@¦¸¬O¦b«Ø¥ß¤§«á¡C Âà´«·|¥ý¦bY¤è¦VÁY©ñ0.75­Ó³æ¦ì¡AµM«á¦bX¤è¦V¥­²¾40­Ó³æ¦ì¡AµM«á¦A±ÛÂà45«×¡C

 

Dim gp As Graphics = PictureBox1.CreateGraphics '«Ø¥ßµe¹Ïª«¥ó

        gp.DrawEllipse(myPen, 0, 0, 100, 50)  'µe¾ò¶ê

        gp.ScaleTransform(1, 0.75F) '¤ñ¨ÒÁY©ñ

        gp.TranslateTransform(40, 0, MatrixOrder.Append) '¥­²¾

        gp.RotateTransform(45, MatrixOrder.Append)  '±ÛÂà

        gp.DrawEllipse(myPen, 0, 0, 100, 50) '½u©ÊÂà´««áµe¾ò¶ê

    

°Ï°ìÂà´«·|®M¥Î¦Ü­nø»sªº¯S©w¶µ¥Ø¡A¦pGraphicsPathª«¥óªºTransform¤èªk¥i¥Î¨ÓÂà´«¸Ó¸ô®|ªº¸ê®ÆÂI (Data Point)¡C¤U¦C½d¨Òø»s¥¼Âà´«ªº¯x§Î©M¸g¹L±ÛÂà©MÂà´«ªº¸ô®|(°²³]¨S¦³¥þ§½Âà´«)¡C

 

Dim gp As Graphics = PictureBox1.CreateGraphics '«Ø¥ßµe¹Ïª«¥ó

        Dim myGraphicsPath As New GraphicsPath '«Ø¥ßµe¹Ï¸ô®|

        Dim myMatrix As New Matrix() '«Ø¥ß¯x°}ª«¥ó

        gp.DrawRectangle(Pens.Blue, 50, 50, 100, 150)

        myGraphicsPath.AddLine(150, 200, 250, 250)

        gp.DrawPath(Pens.Green, myGraphicsPath)

        myMatrix.Rotate(30)

        gp.Transform = myMatrix '¶®y¼Ð­ìÂI±ÛÂà

        myGraphicsPath.Transform(myMatrix)  'Æ[¹î¦³µL¥[¥»¦C«á¹Ï§ÎÅܤÆ

        gp.DrawRectangle(Pens.Red, 50, 50, 100, 150)

        myGraphicsPath.AddLine(150, 200, 250, 250)

     gp.DrawPath(Pens.Gray, myGraphicsPath)

 

±z¥i¥H¨Ï¥Î¥þ§½Âà´«¨Ó§ïÅÜ®y¼Ð¨t²Î¡A¨Ã¥i¨Ï¥Î°Ï°ìÂà´«¨Ó±ÛÂà©MÁY©ñ·s®y¼Ð¨t²Î©Òø»sªºª«¥ó¡C°²³]±z·Q­n¨Ï¥Î¤@­Ó®y¼Ð¨t²Î¡A¨ä­ìÂI¶ZÂ÷¤u§@°Ï¥ªÃä½t200¹³¯À©M¤u§@°Ï³»ºÝ100¹³¯À³B¡C²{¦b±z·Q¨Ï¥Î¹³¯À°µ¬°«×¶q³æ¦ì¡A¨äx¶b«ü¦V¥k¤è¬°¥¿¡Ay¶b´Â¤W¬°¥¿(¹w³]®y¼Ð¨t²Îªºy¶b´Â¤U)¡A¦]¦¹±z¥²¶·¦b¤ô¥­¶b°õ¦æ¤Ï®g¡C¤U­±¬°®y¼Ð¤Ï®gªº¯x°}¤ù¬qµ{¦¡½X¡C

Dim gp As Graphics = PictureBox1.CreateGraphics '«Ø¥ßµe¹Ïª«¥ó

        '¥þ§½Âà´«

        Dim myMatrix As New Matrix(1, 0, 0, -1, 0, 0) '¤Ï®g¯x°}«Y¼Æ

        gp.Transform = myMatrix '

        gp.TranslateTransform(100, 150, MatrixOrder.Append)  '¥­²¾

        ListBox1.Items.Add("¤Ï®g¤Î¥­²¾«á¯x°}«Y¼ÆmyMatrix")

        For Each TransformElement As Single In gp.Transform.Elements

            ListBox1.Items.Add(TransformElement) ¡¥¿é¥XÂà´«¯x°}«Y¼Æ

        Next

        '«Ø¥ß¸ô®|.

        Dim myGraphicsPath As New GraphicsPath()

        Dim myRectangle As New Rectangle(0, 0, 80, 60)

        myGraphicsPath.AddRectangle(myRectangle)

        ' ¶ñ¥R¸ô®|(¤Ï®g·s®y¼Ð¨t²Î),µL°Ï°ìÂà´«

        Dim mySolidBrush = New SolidBrush(Color.Green)

        gp.FillPath(mySolidBrush, myGraphicsPath)

        ' ¦bGraphicsPathª«¥ó³]©w°Ï°ìÂà´«.

        Dim myPathMatrix As New Matrix()

        myPathMatrix.Scale(2, 1)

        myPathMatrix.Rotate(30, MatrixOrder.Append)

        myGraphicsPath.Transform(myPathMatrix)

        ' ¶ñ¥R¸ô®|(¤Ï®g·s®y¼Ð¨t²Î),¦³°Ï°ìÂà´«.

        gp.FillPath(New SolidBrush(Color.Blue), myGraphicsPath)

        gp.Transform.Reset() '½u©ÊÂà´«Âk¹s

        gp.Dispose()

        Dim gp1 As Graphics = PictureBox1.CreateGraphics '«Ø¥ßµe¹Ïª«¥ó

        gp1.TranslateTransform(100, 150, MatrixOrder.Append)  '¥­²¾

        ListBox1.Items.Add("")

        ListBox1.Items.Add("¶È¥­²¾«á¯x°}«Y¼ÆmyMatrix")

        For Each TransformElement As Single In gp1.Transform.Elements

            ListBox1.Items.Add(TransformElement) ¡¥¿é¥XÂà´«¯x°}«Y¼Æ

        Next

        Dim myGraphicsPath1 As New GraphicsPath()

        Dim myRectangle1 As New Rectangle(0, 0, 80, 60)

        myGraphicsPath1.AddRectangle(myRectangle1)

        ' ¶ñ¥R¸ô®|(µL¤Ï®g,­ì®y¼Ð¨t²Î),µL°Ï°ìÂà´«

        Dim mySolidBrush2 = New SolidBrush(Color.Yellow)

        gp1.FillPath(mySolidBrush2, myGraphicsPath)  '¥¼¤Ï®g

        gp1.Dispose()

 

¤U¹Ï¬°°õ¦æ«á¤§¦¨ªGµe­±¡A¹Ï¤¤¶À¦â¬°®y¼Ð¥¼§@¤Ï®g¶È¥­²¾¤§­ì¹Ï§Î¡AÄx¦â³¡¥÷¬°¨Ï¥Î·s®y¼Ð¨t²Î¥B¦³°Ï°ìÂà´«ªÌ¡Fºñ¦â³¡¥÷«h¬°¨Ï¥Î·s®y¼Ð¨t²Î¦ýµL¦³°Ï°ìÂà´«ªÌ¡C

 

 

¦pªG»Ý­n¼g¥X¯x°}¸ê®Æ¥i¥H¨Ï¥ÎÃþ¦ü¤U¦Cµ{¦¡½X¡G

 

For Each TransformElement As Single In GraphicObj.Transform.Elements

            Debug.WriteLine(TransformElement) ¡¥¿é¥XÂà´«¯x°}«Y¼Æ

         Next

 

21.6¾ó¥Öµ¬½u»s§@

¦bVb .0¤Î§ó¦­ª©¥»¡Aø»s¾ó¥Öµ¬½u¬O¬Û·í²³æ¤Îª½±µªº¡A±z¥i¥H±NDrawMode³]©wµ¥©ó6(DrawMode=6¡A§YDrawMode=vbInvert)µe¤@±ø½u¡AµM«á¦b­ì¦ì¸m¦A­«µe¤@¦¸´N¥i¥H±N­ì¨Óª½½u¶î©Ù±¼¡C¦¹§Q¥Î¤@­Ó¹³¯ÀÃC¦â¤§¤Ï¦V¦A¤Ï¦V¬°­ì¨ÓÃC¦â¤§Æ[©À¡C°ò©ó¬Y¨Ç²z¥ÑVB .Net¨Ã¨S¦³¤Ï¦V¼Ò¦¡·§©À¡A¦]¦¹µe¾ó¥Öµ¬½u¡A±z»Ý­n«Ø¥ß¤@­ÓBitmap°}¦C¹Ïª«¥ó(¤@­ÓµêÀÀ½w½Ä¼È¦s°Ï)¨Ó¥Nªí¤ÎÀx¦s¹Ï¹³(image)¡C¦bªí³æ(Form)©Î¹Ï§Î¤è¶ô(PicctureBox)¤Wµe½uµM«á¶î©Ù±¼¡A½Æ»sÀx¦s¦bBitmap °}¦C¹Ïª«¥ó¤¤ªº¹Ï¹³¦Üªí³æ(¹Ï§Î¤è¶ô)¡C

 

MouseDown()µ{§Ç¨Æ¥ó¤¤¡A¨ä¥D­n¤u§@¦³¨â¶µ¡G

(1)©I¥s°Æµ{¦¡SaveSnapshot(Àx¦s§Ö·Ó)Àx¦sÅܼÆm_X1¡Bm_Y1¡B m_X2¤Îm_Y2ªº¦ì¸m®y¼Ð¡ASaveSnapshot«Ø¥ß¤@­Ó·sBitmap°}¦C¹Ï¨Ã¥Î¥¦¨Ó«Ø¥ß¤@­ÓªþµÛ©ó¦¹Bitmap¤§µe¹Ïª«¥ó¡C¬°¤FÅýŪªÌ¯àÁA¸Ñ¹q¸£¹ê»Ú¹B§@¤è¦¡¡A¯S§O±N¨ä½s¼g¦¨¤ñ¸ûª½±µ©öÀ´¤è¦¡¡A¨ÃÃB¥~¦w±ÆLblMDxy1¤ÎLblMDxy2¨â­Ó¼ÐÅÒ±±¨î¶µ¤À§O°O¿ým_X1¡Bm_Y1¤Î m_X2¡Bm_Y2®y¼Ð¦ì¸mÅܤơC

(2)¶}©l³B²zµ{§Ç®É¡A«ö¤U·Æ¹«¥ª¶s®É±Nm_Drawing¥¬ªL­È³]©w¬°¯u(True)¡A¦bm_Drawing

=False®É¡A¦Û°Ê¸õ¥XMouseDown¨Æ¥óµ{§Ç¡C¦b¦¹¤]¦w±ÆLbldrawing±±¨î¶µ¥HÆ[¹îm_DrawingÅܤƱ¡ªp¡C

  

MouseMove()µ{§Ç¨Æ¥ó¡A¥D­n¥\¯à¬°¡G

·íuser«ö¤U·Æ¹«¥ª¶s¨Ã²¾°Ê·Æ¹«®É¡AÀx¦s²¾°Ê·sÂI®y¼Ðm_X2¡Bm_Y2¦ì¸m¡AMouseMove¨Æ¥ó§â¬`(MouseMove event handler)©I¥s°Æµ{¦¡DrawForm(©ÎDrawPic)¥H¶î©Ù±¼µe¦bªí³æ(©Î¹Ï§Î¤è¶ô)¤W«eµe¦n¤§ª½½u¡AµM«á§Q¥ÎDrawLine¤èªk¦bªí³æ¤W(©Î¹Ï§Î¤è¶ô)µe½u(¤£¬OBitmap¤Wª½±µµe½u)¡A¦]¦¹Bitmap¤W¨ÃµL¦¹ª½½u¡C¤U¤@¦^User²¾°Ê·Æ¹«¡AMouseMove¨Æ¥ó§â¬`©I¥sDrawForm(©ÎDrawPic)¡A«hBitmapÅã¥Ü¨ÃµL¦¹·s½u¡C°Æµ{¦¡DrawForm(©ÎDrawPic)¥u¥ÎDrawImage±N¨äÀx¦s¦bBitmapªº¤wµe¦nªº¹Ï¤¸µe¨ìªí³æ(©Î¹Ï§Î¤è¶ô)¤W¡C

 

MouseUp()µ{§Ç¨Æ¥ó¡A¥D­n¥\¯à¬°¡G

 

·íUser©ñ¶}·Æ¹«¥ª¶s®É¡A³qª¾¹q¸£m_Drawing¤w§ï³]©w¬°False¡AMouseUp¨Æ¥ó§â¬`¥ÎÀx¦s¦bBitmap¤¤ªº¥HDrawLine¤èªk©Òµe¥X³Ì«á¤@±øª½½u¦bÀx¦sªºbitmap¤W¡A¦A©I¥sDrawForm Åã¥Ü¦³·s½uªºbitmap¡C

 

Pic_Paint()¨Æ¥óµ{§Ç¤¤Pic_Paint event handle¡A¦]¬°VB .NET¨S¦³AutoRedrawÄÝ©Ê¡A¦]¦¹user·Q¦bªí³æ©Î¹Ï§Î¤è¶ô³Q¥þ³¡©Î³¡¥÷Âл\¦A«ì´_¥XÅS®É¡AUser¥²¶·¦Û¦æ³B²z¡A¦¹Pic_Paint event handler©I¥sDrawPictureBoxÅã¥ÜÀx¦s¦bbitmap¤WÂI°}¹Ï¡C

 
' µe·s½u®Ém_Drawing ¥¬ªL­È¬°¯u.
Private m_Drawing As Boolean
' ¼È¦s½w½Ä°Ï¥H©Ù±¼¾ó¥Öµ¬½u.
Private m_BufferBitmap As Bitmap ¡¥¼È¦s½w½Ä°ÏBitmap
Private m_BufferGraphics As Graphics¡¥¼È¦s½w½Ä°Ïµe¹Ïª«¥ó
' ·Æ¹«¦ì¸m®y¼Ð
Private m_X1 As Integer
Private m_Y1 As Integer
Private m_X2 As Integer
Private m_Y2 As Integer
 
'¶}©lµe¾ó¥Öµ¬½u
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e _
    As System.Windows.Forms.MouseEventArgs) Handles _
    MyBase.MouseDown
    ' ¦pªG«D¨Ï¥Î¨ì·Æ¹«¥ª¶s´N°h¥X.
    If e.Button <> MouseButtons.Left Then Exit Sub
    m_Drawing = True   ¡¥¶}©lµe¹Ï
    ' Àx¦sªí³æ§Ö·Ó
    SaveSnapshot() ¡¥Àx¦s§Ö·Ó
    ' Àx¦s·Æ¹«¥Ø«e¦ì¸m
    m_X1 = e.X
      m_Y1 = e.Y
m_X2 = e.X
    m_Y2 = e.Y
End Sub
 
 
' Ä~Äòø»s¾ó¥Öµ¬½u
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e _
    As System.Windows.Forms.MouseEventArgs) Handles _
    MyBase.MouseMove
    If Not m_Drawing Then Exit Sub ¡¥m_Drawing=false¸õ¥X
    ' Àx¦s·sÂI
    m_X2 = e.X
    m_Y2 = e.Y
    ' ¶î©Ù±¼«e¤@±ø½uErase the previous line.
    DrawForm(Me.CreateGraphics())
    ' ¦bªí³æ¤Wª½±µÃ¸»s·s½uDraw the new line directly on the form.
    Me.CreateGraphics().DrawLine( _
        Pens.Gray, m_X1, m_Y1, m_X2, m_Y2)
End Sub
 
'§¹¦¨·sª½½u Finish drawing the new line.
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e _
    As System.Windows.Forms.MouseEventArgs) Handles _
    MyBase.MouseUp
    ¡¥m_Drawing=Fales°h¥X' Do nothing if we're not drawing.
    If Not m_Drawing Then Exit Sub ¡¥m_Drawing=Fales°h¥X
    m_Drawing = False
 
    ' Àx¦s·sÂISave the new point.
    m_X2 = e.X
    m_Y2 = e.Y
 
    ' ¦b½w½Ä°Ïø¥Ã¤[ª½½uDraw the new line permanently on the buffer.
    m_BufferGraphics.DrawLine( _
        Pens.Blue, m_X1, m_Y1, m_X2, m_Y2)
 
    ' ¦bªí³æ¤W­«Ã¸·s½uRedraw to show the new line.
    DrawForm(Me.CreateGraphics())
End Sub
 
' ­«Ã¸ªí³æRedraw the form.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.PaintEventArgs) Handles _
    MyBase.Paint
    DrawForm(e.Graphics)
End Sub
' ­«Ã¸¤wÀx¦s½w½Ä°Ï¹Ï¤¸Redraw the saved buffer.
Private Sub DrawForm(ByVal gr As Graphics)
    If Not (m_BufferBitmap Is Nothing) Then _
        gr.DrawImage(m_BufferBitmap, 0, 0)
End Sub
Private Sub SaveSnapshot()
    Dim new_bitmap As Bitmap
 
    ' «Ø¥ßµ¥©óªí³æ¤Ø¤oªºÂI°}¹ÏMake a new bitmap that fits the form.
    new_bitmap = New Bitmap(Me.Size.Width, Me.Size.Height, _
        Me.CreateGraphics())
    m_BufferGraphics = Graphics.FromImage(new_bitmap)
 
    ' ²M²z·sÂI°}¹ÏClear the new bitmap.
    m_BufferGraphics.Clear(Me.BackColor)
 
    ' ½Æ»s²{¦sÂI°}¹Ï¤º®e¨ì·sÂI°}¹ÏCopy the existing bitmap's contents into
    ' the new bitmap.
    If Not (m_BufferBitmap Is Nothing) Then
        m_BufferGraphics.DrawImage(m_BufferBitmap, 0, 0)
    End If
 
    ' Àx¦s·sÂI°}¹Ï¤Îµe¹Ïª«¥óSave the new bitmap and graphics objects.
    m_BufferBitmap = new_bitmap
End Sub
¡@
Name(±zªº¤j¦W)
E_MAIL(±zªº¹q¤l«H½c)
Comment or Suggestion(±z·Q¤ÏÀ³ªºª¬ªp¡A«Øij¡A©Î¿Ô¸ß¨Æ¶µ)
­º­¶


¡@

 VB_VB NET: chday169

¡@

­º­¶ | ¦p¦ó¨Ï¥ÎExcel¸Õºâªí§@µ{¦¡¸ê®Æ¿é¤J | ¦p¦óø»sµ¥°ª½u | ¸Ñ3DÁô¨ç¼Æ | ¤uµ{¥òµô®×¨Ò»¡©ú | Spline_Bezier¦±½u´úø | VB6¤uµ{­pºâ¾÷µ{¦¡³]­p | VB NET¤uµ{­pºâ¾÷µ{¦¡³]­p | ¦p¦ó¦bVB6¤¤¨Ï¥ÎVbscript & Dll | ®}ª@¦hÃä§Î | ª«¥ó¾É¦Vµ{¦¡Â²¤¶ | ¦p¦ó¦bVB6¨Ï¥ÎVB.net¹Ï®×µ§¨ê¤ÎÃC¦âªí | VB Net Graphics method(B) | Graphic method in vb net(A)

¤W¦¸­×§ï¦¹ºô¯¸ªº¤é´Á¡G 2018¦~12¤ë02¤é