 
 
задача:
есть PictureBox, в нем картинка, под ним другой, с такой же картинкой. Первый постепенно станивится прозрачным, открывая взору второй.
 
   
  


 
 
 
   
  



и не найдешьесть PictureBox, в нем картинка, под ним другой, с такой же картинкой. Первый постепенно станивится прозрачным, открывая взору второй.
 , это работает только для форм верхнего уровня, там есть свойство Opacity, которое меняет прозрачность
 , это работает только для форм верхнего уровня, там есть свойство Opacity, которое меняет прозрачность





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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5