¡@
|
![]() |
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
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
Button1.BackColor=Color.Blue n±NLabel1«e´º¦â³]©w¬°¬õ¦â¡A¥i¼g¦¨¡G
Label1.ForeColor=Color.Red
¦pªGn³]©w¨ä¥LÃC¦â¡An¦p¦ó³]©w©O¡HMicrosoft MSDN©x¤èºô¯¸¦CÁ|¤F«Ü¦hºØÃC¦â¦p¤Uªí¥i¨ÑUser¨Ï¥Î¡C¨Ò¦p·Qn³]©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ªGn¥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
¦pn³]©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ªGn¨Ï¥Î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
¨Ï¥Î»yªk¬°¡G ColorTranslator.FromOle(QBColor(ÃC¦âÈ¥N½X)) ¨Ò¦pn±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ºÙ")
¨Ò¦pn±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)¥Dn¦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)¥Dn¦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 ¤Wz¡¨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¦pn¦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)
¤Wz¤¤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)
¤Wz¤¤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)
¤Wz¤¤ForeColor ¬°«e´ºÃC¦â¡ABackColr ¬°I´ºÃC¦â¡AI´ºÃ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µ§¨ê
¤Wz¤¤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 ¥ý«Å§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«ez¦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
¤Wzµ{§Ç½X¤¤gr¬O¥Hªí³æ¬°µe¹Ïª«¥ó¡Fgp¬O¥HPictureBox¬°µe¹Ïª«¥ó¡C¹w³]µ§¼e¬°1¡A¦pµ§¼e¨ú¤p©ó1©Îµ¥©ó0¡A«h¨t²Î·|¦Û°Ê§ï¥Î1¡C¤Wzµ{§Ç½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)
¤Wzµ{¦¡½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¥un¦³¦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
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ªGn»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 '
¤Wzµ{§Ç½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¯à»ÝnpºâÂà´«¯x°}¤¤¦U§O¤¸¯À¡C¦p¤U±ªº¤ù¬qµ{¦¡¡G
Dim
myMatrix As Matrix = New Matrix(1, 0, 0, 2, 0, 0)
¡¥¤»Ó¼Æ¦r©Ò¥Nªíªº¯x°}
¡¦«Ø¥ß¤@Óµe¹Ïª«¥ó¡A¤Î¤@Ӷ¦â¯x§Î 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¤Wzªº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)
¯x°}Âà´«¦³©Ò¿×°Ï°ìÂà´«¤Î¥þ°ìÂà´«¨âºØ¡A¥þ°ìÂà´«·|®M¥Î¦Ü¯S©wGraphicsª«¥óø»sªº©Ò¦³¶µ¥Ø¡F¬Û¹ï¦a¡A°Ï°ìÂà´«¥u®M¥Î¦Ünø»sªº¯S©w¶µ¥Ø¡C ¦pªGn«Ø¥ß¥þ°ìÂà´«¡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·Qn¨Ï¥Î¤@Ó®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¨ä¥Dn¤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¥Dn¥\¯à¬°¡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¥Dn¥\¯à¬°¡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
¡@ ¡@ VB_VB NET: chday169 ¡@ |
¤W¦¸×§ï¦¹ºô¯¸ªº¤é´Á¡G 2018¦~12¤ë02¤é