Wenn es nur um die Animation (= temporäre Anzeige) des Bildes geht,
kannst Du direkt in die Picturebox zeichen.
Public Class frmPicMove
Dim bmp As Bitmap
Dim bmp_rect As Rectangle
Dim WithEvents timMove As New Timer With
{.Interval = 50, .Enabled = False}
Dim WithEvents btnStart As New Button With
{.Parent = Me, .Width = 150, .Text = "Move"}
Dim WithEvents pbMove As New PictureBox With
{.Parent = Me, .Top = 50,
.SizeMode = PictureBoxSizeMode.Zoom}
Dim startleft As Integer, anim_left As Integer
Private Sub frmPicMove_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Width = 1050
Me.Height = 550
pbMove.Width = Me.Width - 20
pbMove.Height = Me.ClientSize.Height - (btnStart.Top + btnStart.Height _
+ 20)
'anzuzeigende Bilddatei
Dim picfile As String = "G:\Daten\x1.jpg"
'in Box eingepaßte Bildgröße berechnen (Funktion von oben)
bmp_rect = GetPicRect(picfile, pbMove.Size)
'Bild aus Datei in passender Größe erstellen
Using bmp_orig As New Bitmap(picfile)
bmp = New Bitmap(bmp_orig, New Size(bmp_rect.Width, _
bmp_rect.Height))
End Using
pbMove.BackColor = Color.Yellow
'linke Bildposition in der Box zum Verschieben
'Die Box muss dabei wesentlichbreiter sein als das eingepaßte Bild
startleft = pbMove.Width - bmp.Width
anim_left = startleft + 5
End Sub
Private Sub pbMove_Paint(sender As Object, e As PaintEventArgs) Handles _
pbMove.Paint
'aktuelles Bildrechteck in der Box
Dim rect_paint As New Rectangle(anim_left, 0, bmp_rect.Width, _
bmp_rect.Height)
e.Graphics.Clear(Color.Yellow)
e.Graphics.DrawImage(bmp, rect_paint, New Rectangle(0, 0, bmp.Width, _
bmp.Height),
GraphicsUnit.Pixel)
End Sub
Private Sub timMove_Tick(sender As Object, e As EventArgs) Handles _
timMove.Tick
'um 5 Pixel nach links verschieben
anim_left -= 5
If anim_left < 0 Then anim_left = startleft
'neu zeichnen lassen (Paint wird gerufen)
pbMove.Invalidate()
End Sub
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles _
btnStart.Click
timMove.Enabled = Not timMove.Enabled
End Sub
End Class
Beitrag wurde zuletzt am 25.06.20 um 13:46:29 editiert. |