Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB2008] Pictureboxin esiintuominen asteittain

Sam76 [20.04.2009 15:08:08]

#

Onko mahdollista tuoda kuvaa esiin siten, että se se ikäänkuin ilmestyisi tyhjästä? Tarkoitus olisi tehdä semmoinen, että kun vie hiiren kuvan päälle niin se ilmaantuu hitaasti tai ainakin asteittain esiin. Itse en löytänyt ominaisuutta millä voisin määrittää ks. objektin opacity: tai vastaavaa.

Yritin myös sellaista että ks. kohdasta avatuisi uusi formi asteittain mutta en saanut siinäkään loop:ia toimia toivotulla tavalla. Kokeilin tätä ja paria muuta mutta niistä mennään aina ensimmäisellä läpi. Yritin mm. tälläistä:

Private Sub form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     Dim alku As Double
     For alku = 0.1 To 1
         Me.Opacity = alku
         alku = alku + 0.1
     Next alku
 End Sub

Tänks ö lot jos viitsisitte heittää jotain vinkkiä.

Grez [20.04.2009 15:23:21]

#

No ensinnäkin jos sanot for alku = 0.1 to 1, niin ainoa arvo jonka alku saa on 0.1 koska 1.1 on jo suurempi kuin 1.

Toisekseen, vaikka toi for olisi kunnossa, niin tuohan tulisi about heti, kun ei ole mitään odotusta missään välissä.

Eli kyllä toi opacity sinänsä toimii ihan ok

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim Opac As Double
    Me.Opacity = 0
    Me.Show()
    Me.Refresh()
    For Opac = 0 To 1 Step 0.01
        Me.Opacity = Opac
        Threading.Thread.Sleep(10)
    Next
End Sub

Sam76 [20.04.2009 15:37:55]

#

Kiitos taas Grez. Mulla oli "hiukan" tuon loopin idea hakusessa :/

Pystyykö jotain tämän tapaista tehdä picturebox:lle? En ainakaan äkkiseltään löytänyt mitään tämmöiseen viittaavaa metodia.

Sam76 [21.04.2009 20:06:31]

#

Itse itselleni vastaten. Päivän netin selaamisen jälkeen vaikuttaisi siltä, että picturebox:lle ei ole mitään helppoa tapaa tehdä ks. toiminnallisuutta. Joten täytyne kiertaa tämä ongelma jotenkin esim.tehdä halutusta kuvasta muutama eri versio joissa opacity vaihtuu ja loopata niitä.. ei kuulosta kovin tehokkaalta mutta en nyt muutakaan keksinyt.

neau33 [23.04.2009 18:34:51]

#

Moikka Sam76!

tässä yksi mahdollisuus moisen efektin aikaansaamiseksi...

Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Threading

Public Partial Class MainForm

   Public bmp As Bitmap

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub MainFormLoad(sender As Object, e As EventArgs)
      bmp = New Bitmap(PictureBox1.Image)
   End Sub

   Sub MainFormShown(sender As Object, e As EventArgs)
      For i As Double = 0 To 100
         PicOpacity(PictureBox1, bmp, i)
         If i > 0 AndAlso i Mod 5 = 0 Then
            PictureBox1.Refresh
         End if
      Next
   End Sub

   Public Sub PicOpacity(ByRef bicbox As PictureBox, _
   ByVal bmpOriginal As Image, ByVal hscOpacity As Double)

      Dim Opacity As Single = CSng(hscOpacity / 100)

      bicbox.Image = bmpOriginal
      Dim OMatrix As ColorMatrix = _
      New 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, Opacity, 0}, _
      New Single() {0, 0, 0, 0, 1}})
      ApplyColorMatrix(bicbox.Image, OMatrix)
      Thread.Sleep(5)

   End Sub

   Public Sub ApplyColorMatrix( _
   ByRef MyImage As Image, _
   ByRef MyMatrix As ColorMatrix)

      Dim ImgAtt As New ImageAttributes
      Dim bmpMatrix As New Bitmap( _
      MyImage.Width, MyImage.Height)
      Dim grMatrix As Graphics = _
      Graphics.FromImage(bmpMatrix)
      Dim hscGamma As Double
      hscGamma = 50
      ImgAtt.SetColorMatrix(MyMatrix)
      grMatrix.DrawImage(MyImage, _
      New Rectangle(0, 0, MyImage.Width, _
      MyImage.Height), 0, 0, _
      MyImage.Width, MyImage.Height, _
      GraphicsUnit.Pixel, ImgAtt)
      MyImage = bmpMatrix
      grMatrix.Dispose()
      ImgAtt.Dispose()

   End Sub

End Class

Sam76 [23.04.2009 21:46:41]

#

Kiitos taas Nea. Huhhuh, olet kyllä uskomaton.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta