VB.Net Tutorial/2D Graphics/Paint Buffer — различия между версиями

Материал из VB Эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:54, 26 мая 2010

Draw to the form indirectly through a bitmap

<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class DrawImageIndirectly

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class Public Class Form1

   Private Sub Form1_Paint(ByVal sender As Object, _
         ByVal e As System.Windows.Forms.PaintEventArgs) _
         Handles Me.Paint
       
       Dim x As Single
       Dim y As Single
       Dim xCenter As Single
       Dim yCenter As Single
       Dim angle As Single
       Dim radians As Single
       Dim workImage As Bitmap
       Dim canvas As Graphics
       workImage = New Bitmap(Me.Size.Width, Me.Size.Height,e.Graphics)
       canvas = Graphics.FromImage(workImage)
       For angle = 0 To 360 Step 2
           radians = angle * Math.PI / 180
           x = 500 * Math.Cos(radians)
           y = 500 * Math.Sin(radians)
           yCenter = Me.ClientSize.Height / 2
           xCenter = Me.ClientSize.Width * 10 / 21
           canvas.DrawLine(Pens.Black, xCenter, yCenter, xCenter + x, yCenter + y)
           xCenter = Me.ClientSize.Width * 11 / 21
           canvas.DrawLine(Pens.Black, xCenter, yCenter, xCenter + x, yCenter + y)
       Next angle
       e.Graphics.DrawImage(workImage, 0, 0)
   End Sub
   Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
       Me.Invalidate()
   End Sub

End Class

<Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Class Form1

   Inherits System.Windows.Forms.Form
   "Form overrides dispose to clean up the component list.
   <System.Diagnostics.DebuggerNonUserCode()> _
   Protected Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing AndAlso components IsNot Nothing Then
           components.Dispose()
       End If
       MyBase.Dispose(disposing)
   End Sub
   "Required by the Windows Form Designer
   Private components As System.ruponentModel.IContainer
   "NOTE: The following procedure is required by the Windows Form Designer
   "It can be modified using the Windows Form Designer.  
   "Do not modify it using the code editor.
   <System.Diagnostics.DebuggerStepThrough()> _
   Private Sub InitializeComponent()
       Me.SuspendLayout()
       "
       "Form1
       "
       Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
       Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
       Me.ClientSize = New System.Drawing.Size(430, 419)
       Me.DoubleBuffered = True
       Me.Name = "Form1"
       Me.Text = "Creating a Bitmap"
       Me.ResumeLayout(False)
   End Sub

End Class</source>

Use Bitmap to buffer paint

<source lang="vbnet">Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms Imports System.Math Imports System.Drawing.Imaging

public class Bufferring

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class Public Class Form1

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
       DrawDiamond()
   End Sub
   Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles MyBase.Resize
       DrawDiamond()
   End Sub
   Private Sub DrawDiamond()
       Dim wid As Integer = picCanvas.ClientSize.Width
       Dim hgt As Integer = picCanvas.ClientSize.Height
       If wid < 1 Or hgt < 1 Then Exit Sub
       Dim bm As New Bitmap(wid, hgt)
       Dim gr As Graphics = Graphics.FromImage(bm)
       Dim bg_brush As New HatchBrush(HatchStyle.HorizontalBrick, Color.Blue, Color.Aqua)
       gr.FillRectangle(bg_brush, picCanvas.ClientRectangle)
       Dim pts() As Point = {New Point(wid \ 2, 0),New Point(wid, hgt \ 2), _
           New Point(wid \ 2, hgt),New Point(0, hgt \ 2) }
       gr.FillPolygon(Brushes.White, pts)
       gr.DrawPolygon(Pens.Black, pts)
       picCanvas.Image = bm
       bg_brush.Dispose()
       gr.Dispose()
   End Sub

End Class

<Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Public Class Form1

   Inherits System.Windows.Forms.Form
   "Form overrides dispose to clean up the component list.
   <System.Diagnostics.DebuggerNonUserCode()> _
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing AndAlso components IsNot Nothing Then
           components.Dispose()
       End If
       MyBase.Dispose(disposing)
   End Sub
   "Required by the Windows Form Designer
   Private components As System.ruponentModel.IContainer
   "NOTE: The following procedure is required by the Windows Form Designer
   "It can be modified using the Windows Form Designer.  
   "Do not modify it using the code editor.
   <System.Diagnostics.DebuggerStepThrough()> _
   Private Sub InitializeComponent()
       Me.picCanvas = New System.Windows.Forms.PictureBox
       CType(Me.picCanvas, System.ruponentModel.ISupportInitialize).BeginInit()
       Me.SuspendLayout()
       "
       "picCanvas
       "
       Me.picCanvas.Dock = System.Windows.Forms.DockStyle.Fill
       Me.picCanvas.Location = New System.Drawing.Point(0, 0)
       Me.picCanvas.Name = "picCanvas"
       Me.picCanvas.Size = New System.Drawing.Size(292, 273)
       Me.picCanvas.TabIndex = 0
       Me.picCanvas.TabStop = False
       "
       "Form1
       "
       Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
       Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
       Me.ClientSize = New System.Drawing.Size(292, 273)
       Me.Controls.Add(Me.picCanvas)
       Me.Name = "Form1"
       Me.Text = "AutoRedraw"
       CType(Me.picCanvas, System.ruponentModel.ISupportInitialize).EndInit()
       Me.ResumeLayout(False)
   End Sub
   Friend WithEvents picCanvas As System.Windows.Forms.PictureBox

End Class</source>