VB.Net Tutorial/2D Graphics/Paint Buffer — различия между версиями
Admin (обсуждение | вклад) м (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>