none
opacity picturebox RRS feed

  • Domanda

  • ciao a tutti,

    io ho sovrapposto 2 picturebox

    cosi semplice semplice:

     Dim img1 As New Bitmap(pic.image)
                Dim img2 As New Bitmap(PictureBox3.BackgroundImage)
                img2.MakeTransparent(Color.White)
                Dim gra As Graphics = Graphics.FromImage(img1)
                gra.DrawImage(img2, New RectangleF(0, 0, img1.Width, img1.Height), New RectangleF(0, 0, img1.Width, img1.Height), GraphicsUnit.Pixel)
                PictureBox2.Image = img1

    pero adesso volevo aggiungere una trackbar è regolare l opacita della pic.image

    si puo???

    oppure come siappiamo le picturebox non supprtano opacity

    grazie

    lunedì 26 marzo 2012 20:36

Risposte

Tutte le risposte

  • Se nella tua applicazione hai bisogno di aggiungere funzionalità di questo tipo, dovresti prendere in considerazione il passaggio a WPF, che fornisce funzionalità di questo tipo in maniera nativa.

    Ad ogni modo, anche con Windows Forms puoi impostare il livello di trasparenza di un'immagine. Hai bisogno di un oggetto di tipo ColorMatrix, http://msdn.microsoft.com/en-us/library/system.drawing.imaging.colormatrix.aspx, in cui specifichi i valori per la componente alpha dell'immagine (che rappresenta, appunto, la trasparenza).

    Ti consiglio di dare un'occhiata a questo post: http://howtoideas.net/how-to-set-image-opacity-using-c, in cui troverai una descrizione degli step necessari. Il codice è in C#, ma una volta compreso il funzionamento, non dovresti avere problemi ad applicare l'algoritmo nel tuo progetto VB .NET.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Modificato Marco MinervaMVP lunedì 26 marzo 2012 22:47
    • Contrassegnato come risposta eugenio martedì 27 marzo 2012 21:45
    lunedì 26 marzo 2012 22:46
  • Se nella tua applicazione hai bisogno di aggiungere funzionalità di questo tipo, dovresti prendere in considerazione il passaggio a WPF, che fornisce funzionalità di questo tipo in maniera nativa.

    Ad ogni modo, anche con Windows Forms puoi impostare il livello di trasparenza di un'immagine. Hai bisogno di un oggetto di tipo ColorMatrix, http://msdn.microsoft.com/en-us/library/system.drawing.imaging.colormatrix.aspx, in cui specifichi i valori per la componente alpha dell'immagine (che rappresenta, appunto, la trasparenza).

    Ti consiglio di dare un'occhiata a questo post: http://howtoideas.net/how-to-set-image-opacity-using-c, in cui troverai una descrizione degli step necessari. Il codice è in C#, ma una volta compreso il funzionamento, non dovresti avere problemi ad applicare l'algoritmo nel tuo progetto VB .NET.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    c è l ho fatta ho usato quel metodo ma anche un po inventato

    purtroppo tutti quei webclient sono necessari

    l importante è che l esercizio opacity con trackbar è riuscito

    è funziona

    guarda:

    Imports System.Net
    Imports System.IO
    Imports System.Drawing.Imaging
    Public Class Form1
        Dim cont As Integer
        Dim imgover As Bitmap = Nothing
        Dim imgsub As Bitmap = Nothing
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Me.Cursor = Cursors.WaitCursor
            Application.DoEvents()
          Try
                ' Make a WebClient.
                Dim web_client As WebClient = New WebClient
                web_client.Credentials = New NetworkCredential(TextBox2.Text, TextBox3.Text)
                ' Get the indicated URI.
                Dim respons As Stream = _
                    web_client.OpenRead("http://" & TextBox1.Text & "/body?mode=controlScreenShot")
                respons.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Read Error", _
                    MessageBoxButtons.OK, _
                        MessageBoxIcon.Exclamation)
    End Try
            Try
    ' Make a WebClient.
                Dim wb As WebClient = New WebClient
                wb.Credentials = New NetworkCredential(TextBox2.Text, TextBox3.Text)
                ' Get the indicated URI.
                Dim response As Stream = _
                    wb.OpenRead("http://" & TextBox1.Text & "/root/tmp/screenshot.bmp")
                imgsub = New Bitmap(response)
                response.Close()
            Catch ex As Exception
                Beep()
            End Try
    
            Try
                ' Make a WebClient.
                Dim web_client As WebClient = New WebClient
                web_client.Credentials = New NetworkCredential(TextBox2.Text, TextBox3.Text)
                ' Get the indicated URI.
                Dim respons1 As Stream = _
                    web_client.OpenRead("http://" & TextBox1.Text & "/body?mode=controlFBShot")
                respons1.Close()
            Catch ex As Exception
                Me.Cursor = Cursors.Default
            End Try
            Try
                Dim wb As WebClient = New WebClient
                wb.Credentials = New NetworkCredential(TextBox2.Text, TextBox3.Text)
                ' Get the indicated URI.
                Dim response1 As Stream = _
                    wb.OpenRead("http://" & TextBox1.Text & "/root/tmp/osdshot.png")
                   'get image opacity'
                imgover = Image.FromStream(response1)
                Dim bitmap As New Bitmap(imgover.Width, imgover.Height)
                Dim graphic As Graphics = Graphics.FromImage(bitmap)
                Dim f As Single = TrackBar1.Value
                Dim colormatrix As New ColorMatrix()
                colormatrix.Matrix33 = f
                Dim imageAttributes As New ImageAttributes()
                imageAttributes.SetColorMatrix(colormatrix, ColorMatrixFlag.[Default], ColorAdjustType.Bitmap)
                graphic.DrawImage(imgover, New Rectangle(0, 0, bitmap.Width, bitmap.Height), 0, 0, imgover.Width, imgover.Height, GraphicsUnit.Pixel, imageAttributes)
                imgover = bitmap
                graphic.Dispose()
    
               'OVERLAY 2 IMAGE.FROMSTREAM'
              Using gr = Graphics.FromImage(imgsub)
    
                    gr.DrawImage(imgover, 0, 0)
                End Using
                Me.PictureBox2.Image = imgsub
                response1.Close()
    'OVERLAY BACKGROUND IMAGE PICBOX3 OVER PICTUREBOX2'
                Dim img1 As New Bitmap(imgsub)
                Dim img2 As New Bitmap(PictureBox3.BackgroundImage)
                img2.MakeTransparent(Color.White)
                Dim gra As Graphics = Graphics.FromImage(img1)
                gra.DrawImage(img2, New RectangleF(0, 0, img1.Width, img1.Height), New RectangleF(0, 0, img1.Width, img1.Height), GraphicsUnit.Pixel)
                PictureBox2.Image = img1
    
            Catch ex As Exception
            End Try
      'save screenshots with each click'
        cont = cont + 1
           
                Try
         
                PictureBox2.Image.Save(TextBox4 .Text & "\myscreenhot" & cont & ".jpg")
    
            Catch ex As Exception
    beep ()
           End Try
    End Sub
    
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            TextBox4.Text = Application.StartupPath
            TrackBar1.SetRange(1, 2)
    
        End Sub

    grazie



    • Modificato eugenio martedì 27 marzo 2012 22:02
    martedì 27 marzo 2012 22:00