Прозрачность контрола

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Прозрачность контрола

Сообщение Alex[fj] » 27.05.2007 (Вс) 9:53

Опять же искал, но ничего толком не нашел. :(
задача:
есть PictureBox, в нем картинка, под ним другой, с такой же картинкой. Первый постепенно станивится прозрачным, открывая взору второй.
:?: :?: :?:
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 27.05.2007 (Вс) 20:09

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

даже для дочерних форм - оно не работает

о PictureBox - и говорить не чего,но можно поиграть с классом битмап
Человек рождён для того, чтобы достичь жизни...

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 27.05.2007 (Вс) 20:42

Жаль...
Ладно, тогда в топку PictureBox, буду мучить форму.

А как поиграть с классом битмап?
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 28.05.2007 (Пн) 8:59

VB-constructor писал(а):...но можно поиграть с классом битмап

Тоесть можно создавать эффекты перехода? По пиксельно, прозрачность. Круто! :)
Только не разу ничего такого не делал и представления не имею, как. :oops:
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 28.05.2007 (Пн) 9:22

Тоесть можно создавать эффекты перехода? По пиксельно, прозрачность. Круто!
Только не разу ничего такого не делал и представления не имею, как.


тут смотрел?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 28.05.2007 (Пн) 10:07

Код видел, наверно, раз я там еще и отвечал... :roll:
Все, въезжаю по чуть-чуть. Только у меня меняется еще и размер изображения. :?
От твоего кода осталось:
Код: Выделить всё
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
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 06.06.2007 (Ср) 14:34

Nord777, подскажи, пожалуйста, а можно, чтобы изображение расворялось и проявлялось другое в том же PictureBox'е?
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 07.06.2007 (Чт) 0:08

Код: Выделить всё
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
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 07.06.2007 (Чт) 14:24

Nord777, спасибо :)
Только, наверно, тут размер должен быть нижнего изображения
Код: Выделить всё
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

Оно же может быть больше верхнего...
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 07.06.2007 (Чт) 16:23

Совершенно верно. Это опечатка :-)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

    TopList