-1
ビジュアルベーシック2012では、ピクチャボックスで生成されたグラフィックスを別の間隔で別のものにコピーして削除しようとしましたちらつき効果。私はインターネット上でいくつかのソリューションを見つけましたが、どれもうまくいきません。ピクチャボックスからビジュアルベーシックな別のピクチャボックスにグラフィックスを変換する方法
問題は、キャンバスからのグラフィックスがdisplaygraphics画像ボックスにコピーされないことです。
Imports System.Drawing.Drawing2D
Public Class Form1
Private g As Graphics
''(0,0)=point, (0,1)=integer
Dim points = {
{New Point(150, 110), 0},
{New Point(210, 200), 0},
{New Point(250, 200), 0},
{New Point(250, 150), 0}
}
Public Sub EnableDoubleBuffering()
' Set the value of the double-buffering style bits to true.
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.UpdateStyles()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
g = Canvas.CreateGraphics
g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias 'smooth stroke
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias 'smooth text
g.InterpolationMode = InterpolationMode.HighQualityBilinear 'smooth fill
End Sub
Function ODGrid(ByVal xy As Double, ByVal depth As Double, ByVal move As Double)
Dim xyd As Double = (((xy - move)/depth) + move) ''explanation: the more a number is divided the closer to 0 it is, same concept here.
Return xyd
End Function
Private Sub NewQuad3D(colour As Brush, ByVal p() As Point, ByVal d() As Double)
g.FillPolygon(colour, p)
End Sub
Dim togbuf = 1
Dim pointfit(3) As Point
Dim depthfit(3) As Double
Private Sub PerTick_Tick(sender As Object, e As EventArgs) Handles PerTick.Tick
If togbuf = 1 Then
Dim img = New Bitmap(Canvas.Width, Canvas.Height, g)
DisplayGraphics.Image = img
Canvas.Refresh()
'calculations
points(3, 0) = New Point(points(3, 0).X + 1, 150)
For i As Integer = 0 To 3
pointfit(i) = points(i, 0)
depthfit(i) = points(i, 1)
Next
Else
NewQuad3D(New SolidBrush(Color.FromArgb(255, 240, 100, 50)), pointfit, depthfit)
End If
togbuf *= -1
End Sub
End Class
使用していないBitmapオブジェクトやGraphicsオブジェクトを処理していないため、プログラムがGDIオブジェクトをリークしています。 – Dai
ええ私はちょうど数週間前にこのビジュアルベーシックに入ったばかりです – Joe