Overlay picturebox

di il
10 risposte

Overlay picturebox

Salve amici

con questo codice scarico 2 foto ...
ma a sovrapporle non riesco un esempio ??
grazie
Imports System.Net
Imports System.IO

Public Class Form1

    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("xxx", "xxx")
            ' Get the indicated URI.
            Dim response As Stream = _
                web_client.OpenRead(txtURI.Text)

            ' Read the result.
            Dim bitmap As New Bitmap(response)
            PictureBox1.Image = bitmap

            ' Close the stream reader and its underlying stream.
            response.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Read Error", _
                MessageBoxButtons.OK, _
                    MessageBoxIcon.Exclamation)
        End Try

        Me.Cursor = Cursors.Default
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Me.Cursor = Cursors.WaitCursor
        Application.DoEvents()

        Try
            ' Make a WebClient.
            Dim web_client As WebClient = New WebClient
            web_client.Credentials = New NetworkCredential("xxx", "xxx")
            ' Get the indicated URI.
            Dim response As Stream = _
                web_client.OpenRead(txtURI2.Text)

            ' Read the result.
            Dim bitmap As New Bitmap(response)

            PictureBox2.Image = bitmap

            ' Close the stream reader and its underlying stream.
            response.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Read Error", _
                MessageBoxButtons.OK, _
                    MessageBoxIcon.Exclamation)
        End Try

        Me.Cursor = Cursors.Default
    End Sub

10 Risposte

  • Re: Overlay picturebox

    Immagino che tu stia parlando della trasparenza, perchè sovrapporre due PictureBox non è certo un problema.

    Le questione è in questi termini:

    - l' immagine che scarichi deve gestire la trasparenza (quindi gif o png).
    - Nel pictureBox devi impostare BackColor = Transparent.

    Ma questo non è ancora sufficiente, la trasparenza prende il colore di fondo del parent, che nel tuo caso sarebbe il form.

    - Devi impostare
    
     pictureBox2.Parent = pictureBox1
    
    Ora se sovrapponi le due immagini vedrai quella sotto nelle parti trasparenti.

    Attenzione che vedi la trasparenza solo a run-time, mentre sei a design-time la trasparenza non funziona. Inoltre muovendo il parent del controllo potresti avere alcuni problemi con le sue coordinate, però questa è un' altra questione.

    Bye
  • Re: Overlay picturebox

    Mi spiace ma non riesco..
    se a quel codice aggiungo questo
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            Dim imgsub As Bitmap = Nothing
            Dim imgover As Bitmap = Nothing
            imgsub = New Bitmap(PictureBox1.Image)
            Using gr = Graphics.FromImage(imgsub)
                imgover = New Bitmap(PictureBox2.Image)
                gr.DrawImage(imgover, 0, 0)
            End Using
            Me.PictureBox3.Image = imgsub
        End Sub
    cioe un terzo button funziona ma unirlo a quel codice in alto niente
    non va

    ps: comunque sono bitmap e gestiscono la trasparenza autonomamente


    EDIT::::
    Azz cè l ho fatta
    facile
    bastava sostituire
    imgsub = New Bitmap(response)
    imgover = New Bitmap(response1)

  • Re: Overlay picturebox

    Ciao tatone

    tatone ha scritto:


    ps: comunque sono bitmap e gestiscono la trasparenza autonomamente
    Come si gestice la trasparenza sui bitmap? Mi pare che bisogna indicare quale colore deve essere considerato trasparente o qualcosa del genere. Sai dirmi come si imposta?
  • Re: Overlay picturebox

    barba59 ha scritto:


    Ciao tatone

    tatone ha scritto:


    ps: comunque sono bitmap e gestiscono la trasparenza autonomamente
    Come si gestice la trasparenza sui bitmap? Mi pare che bisogna indicare quale colore deve essere considerato trasparente o qualcosa del genere. Sai dirmi come si imposta?
    questo lo pensavo anchio sincermente
    precisare che: l immagine in sub è bitmap
    la seconda è .png
    esempio :
     Dim img1 As New Bitmap(My.Resources.background)
            Dim img2 As New Bitmap("C:\User\beddhu\Desktop\cooltext656250152")
            img2.MakeTransparent(Color.White)
            Dim gr As Graphics = Graphics.FromImage(img1)
            gr.DrawImage(img2, New RectangleF(0, 0, img1.Width, img1.Height), New RectangleF(0, 0, img1.Width, img1.Height), GraphicsUnit.Pixel)
            PictureBox1.Image = img1
    in questo caso bianco


    invece in questo caso no praticamente non ho fatto niente si sono già automaticamente sovrapposte e l immagine over gia trasparente come da screenshot
    http://i41.tinypic.com/5ppvlh.jp
    ---------------------------------
    in questo caso però (credo)la trasparenza non è dovuta dal codice ma dai parametri web
    perche la richiesta e di tipo webclient

    invece ora il mio problema che sto studiando è
    trascinare quest immagine da picturebox a desktop altro grattacapo...
  • Re: Overlay picturebox

    tatone ha scritto:


    invece ora il mio problema che sto studiando è
    trascinare quest immagine da picturebox a desktop altro grattacapo...
    Non sono sicuro di aver capito, stai parlando del drag and drop?
  • Re: Overlay picturebox

    barba59 ha scritto:


    Non sono sicuro di aver capito, stai parlando del drag and drop?
    si
    non riesco proprio a trascinare in desktop
    da picturebox a picturebox si
    oppure spostare la picturebox nel form
    ma da picturebox a desktop non lo
    so fare .
  • Re: Overlay picturebox

    Quindi vorresti cliccare su una picturebox, avviare il drag, spostarti sul desktop, rilasciare il tasto del mouse, e a questo punto cosa vorresti che accadesse? che l' immagine di sfondo del desktop diventi l' immagine contenuta nel picture box?
  • Re: Overlay picturebox

    barba59 ha scritto:


    Quindi vorresti cliccare su una picturebox, avviare il drag, spostarti sul desktop, rilasciare il tasto del mouse, e a questo punto cosa vorresti che accadesse? che l' immagine di sfondo del desktop diventi l' immagine contenuta nel picture box?
    si, ma non che diventi l immagine del desktop
    ma salvarla localmente, lo so basta fare pic.im.save("c:\desk\----.gif") e si salva
    stavo pensando ad un altra soluzione pero per il momento volevo
    provare questa
  • Re: Overlay picturebox

    Per il form ti devi comportare come per gli altri controlli, ovvero:

    - Imposti l' evento MouseDown sul controllo da cui parte il drag.
    - Imposti AllowDrop a true del form (o del controllo che lo deve ricevere).
    - Imposti l' evento DragEnter del form (o del controllo che lo deve ricevere) per visualizzare correttamente il mouse.
    - Imposti l' evento DragDrop del form (o del controllo che lo deve ricevere) per accettare il drop.

    Attenzione ad una cosa, per qualche ragione misteriosa, i controlli PictureBox non espongono la property AllowDrop a design-time, quindi se usi un PictureBox come destinazione, la devi impostare nel codice (neppure l' intellisense la mostra ma esiste).
    
    Private Sub PictureBox1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
            Dim s As String = PictureBox1.ImageLocation
            If s Is Nothing Then
                s = "No location"
            End If
    
            PictureBox1.DoDragDrop(s, DragDropEffects.Copy)
    End Sub
    
    Private Sub Form1_DragEnter(sender As System.Object, e As  System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter
            If e.Data.GetDataPresent(DataFormats.StringFormat) Then
                e.Effect = DragDropEffects.Copy
            Else
                e.Effect = DragDropEffects.None
            End If
    End Sub
    
    Private Sub Form1_DragDrop(sender As System.Object, e As  System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
            Dim s As String = e.Data.GetData(DataFormats.StringFormat)
            MessageBox.Show(s)
    End Sub
    
    In questo esempio se trascini dal PictureBox al form ti appare un message box con la Location dell' immagine (la Location potrebbe non esistere).

    Ricorda di mettere a true AllowDrop del form.
  • Re: Overlay picturebox

    Grazie .

    sto impazzendo a spostarla su desktop l immagine
Devi accedere o registrarti per scrivere nel forum
10 risposte