Hallo!
Ich möchte ein Bild über ein anderes Bild schieben
Funktioniert mit diesem Code:
PictureBox [Pb1] – Size: 560/315 - SizeMode: Normal
PictureBox [Pb2] – Size: 560/315 - SizeMode: Zoom
Public Class frmMain
Private ActivePic, NextPic As Bitmap
Private PicBoxRect As New Rectangle(0, 0, 560, 315)
Private i As Integer = 0
Private strW, strH As String
Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
PB2.Image = New Bitmap("C:\...\xxx.jpg") ' 561x637 - 0,880...
Using bmp1 As New Bitmap(560, 315)
PB2.BackColor = Color.Green
PB2.DrawToBitmap(bmp1, PicBoxRect)
PB1.Image = New Bitmap(bmp1)
ActivePic = New Bitmap(bmp1)
End Using
PB2.Image = New Bitmap("C:\...\yyy.jpg") ' 1920x1080 - 1,777...
Using bmp2 As New Bitmap(560, 315)
PB2.BackColor = Color.Red ' -> .Black sonst Streifen rechts und
unten (unter PB1 schwarzes Panel)
PB2.DrawToBitmap(bmp2, PicBoxRect)
NextPic = New Bitmap(bmp2)
End Using
End Sub
Private Sub BtnLR_Click(sender As Object, e As EventArgs) Handles _
BtnLR.Click
i = 0
Do While i <= 560 / 10
strW = CStr(i * 10)
Fade("0, 0, " & strW & ", 315, 0, 0, " & strW & ", 315")
Loop
End Sub
Private Sub BtnOU_Click(sender As Object, e As EventArgs) Handles _
BtnOU.Click
i = 0
Do While i <= 315 / 10
strH = CStr(i * 10)
Fade("0, 0, 560, " & strH & ", 0, 0, 560, " & strH)
Loop
Fade("0, 0, 560, 315, 0, 0, 560, 315")
End Sub
Private Sub BtnL_Click(sender As Object, e As EventArgs) Handles BtnL.Click
i = 0
Do While i <= 560 / 10
strW = CStr(i * 10)
Fade("0, 0, " & strW & ", 315, " & _
CStr(560 - CInt(strW)) & ", 0, " & strW & " , 315")
Loop
End Sub
Private Sub Fade(Str As String)
Dim A() As String = Str.Split(",")
i += 1
'Threading.Thread.Sleep(100)
Using bm As New Bitmap(PicBoxRect.Width, PicBoxRect.Height)
Dim g2 As Graphics = Graphics.FromImage(bm)
g2.DrawImage(ActivePic, PicBoxRect)
g2.DrawImage(NextPic, New Rectangle(A(0), A(1), A(2), A(3)), _
New Rectangle(A(4), A(5), A(6), A(7)), _
GraphicsUnit.Pixel)
Dim g As Graphics = PB1.CreateGraphics
g.DrawImage(bm, PicBoxRect)
End Using
End Sub
End Class Aber:
Der rechte bzw. untere Rand des einblendenden Bildes flackert
Gut zu erkennen, wenn [Threading.Thread.Sleep(100] aktiv
Rechts und links sind Streifen in der Hintergrundfarbe sichtbar (Breite, Höhe 1 Pixel)
Fällt nicht auf, wenn Panel hinter dem Bild mit gleicher Farbe wie Hintergrundfarbe der PictureBox
Was muss ich ändern??? |