Опять же искал, но ничего толком не нашел.
задача:
есть PictureBox, в нем картинка, под ним другой, с такой же картинкой. Первый постепенно станивится прозрачным, открывая взору второй.
и не найдешь , это работает только для форм верхнего уровня, там есть свойство Opacity, которое меняет прозрачностьесть PictureBox, в нем картинка, под ним другой, с такой же картинкой. Первый постепенно станивится прозрачным, открывая взору второй.
VB-constructor писал(а):...но можно поиграть с классом битмап
Тоесть можно создавать эффекты перехода? По пиксельно, прозрачность. Круто!
Только не разу ничего такого не делал и представления не имею, как.
Dim none As System.Drawing.Image
Dim proz As Single = 1.0!
Dim OriginalImage As Image = My.Resources.Church
Dim ia As Imaging.ImageAttributes = New Imaging.ImageAttributes
Dim cm As Imaging.ColorMatrix = New Imaging.ColorMatrix(New Single()() _
{New Single() {1, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0, 0, 1, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}})
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
proz -= 0.01!
If proz < 0.0! Then
PictureBox1.Image = none
Timer1.Enabled = False
Exit Sub
End If
cm.Matrix33 = proz
ia.SetColorMatrix(cm)
With PictureBox1
Dim g As Graphics = Graphics.FromImage(.Image)
g.Clear(PictureBox1.BackColor)
g.DrawImage(OriginalImage, _
.ClientRectangle, 0, 0, _
.Image.Width, .Image.Height, GraphicsUnit.Pixel, ia)
g.Dispose()
End With
PictureBox1.Refresh()
End Sub
Public Class Form1
Dim proz As Single = 1.0!
Dim OverImage, UnderImage As Image
Dim ia As Imaging.ImageAttributes = New Imaging.ImageAttributes
Dim cm As Imaging.ColorMatrix = New Imaging.ColorMatrix(New Single()() _
{New Single() {1, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0, 0, 1, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}})
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
OverImage = New Bitmap("1.JPG")
UnderImage = New Bitmap("2.JPG")
PictureBox1.Image = OverImage.Clone
PictureBox1.Size = New Size(OverImage.Width, OverImage.Height)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
proz -= 0.05!
If proz < 0.0! Then
proz = 0.0!
Timer1.Enabled = False
End If
cm.Matrix33 = proz
ia.SetColorMatrix(cm)
With PictureBox1
Dim g As Graphics = Graphics.FromImage(.Image)
g.DrawImage(UnderImage, 0, 0)
g.DrawImage(OverImage, _
Rectangle.Round(OverImage.GetBounds(GraphicsUnit.Pixel)), 0, 0, _
OverImage.Width, OverImage.Height, GraphicsUnit.Pixel, ia)
g.Dispose()
End With
PictureBox1.Refresh()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Interval = 50
Timer1.Enabled = True
End Sub
End Class
With PictureBox1
Dim g As Graphics = Graphics.FromImage(.Image)
g.DrawImage(UnderImage, 0, 0)
g.DrawImage(OverImage, _
Rectangle.Round(OverImage.GetBounds(GraphicsUnit.Pixel)), 0, 0, _
UnderImage.Width, UnderImage.Height, GraphicsUnit.Pixel, ia)
g.Dispose()
End With
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59