Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352

    [vb.net] sovrapposiozione immagini con trasparenza

    Buongiorno,
    come posso sovrapporre più immagini in una form con la trasparenza?

    Mi spiego: aggoungo in una form delle immagini a run-time creando dei controlli pictur box...
    Avrei bisogno di sovraporle ad esempio mettendone una sotto come sfondo ed una sopra che in trasparenza mi faccia vedere l'immagine sotto...

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Ciao,
    non usare una picturebox per ogni immagine, ma disegna direttamente nel graphic della superficie che utilizzi per visualizzare l'immagine (che potrebbe anche essere 1 picturebox, ma solo 1!)

    puoi fare in diversi modi, uno potrebbe essere quello di ereditare dalla classe del controllo che usi per visualizzare l'immagine (per esempio una pictureBox) e fare un override del metodo OnPaint, in questo modo ottieni un oggetto di tipo System.Windows.Forms.PaintEventArgs, tra le sue proprietà troverai la Graphics che ti consentirà di utilizzare su di essa il metodo DrawImage per disegnare l'immagine, a questo dovrai passargli l'immagine (tipo Image) e la posizione relativa alla picturebox con coordinate xy (tipo Point o due parametri Integer), infine dovrai passare il tipo PaintEventArgs al metodo base.
    Ovviamente le tue immagini dovranno avere le trasparenze.

    comunque è più facile a farsi che a dirsi :
    codice:
    Public Class MyPictureBox
        Inherits PictureBox
        Protected Overrides Sub OnPaint(pe As System.Windows.Forms.PaintEventArgs)
            pe.Graphics.DrawImage(New Bitmap("TuoPercorso/Immagine"), 0, 0)
            MyBase.OnPaint(pe)
        End Sub
    End Class
    ... e ovviamente le devi disegnare in sequenza logica, dalla più "bassa" alla più "alta".


  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352
    grazie 1000,
    non ho capito solo una cosa..come faccio a disegnare le varie immagini all'interno della picture box? dove gli dico dentro quale oggeto devono essere disegnate?

    poi questo oggetto può essere spostato e ridimensionato come posso fare con una pictur box reale giusto?
    grazie

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    ciao,
    l'oggetto Graphic disegna le immagini nella pictureBox.
    nell'esempio che ti ho fatto puoi impostare le tue immagini ad esempio dentro una proprietà, magari una lista.
    Considera la pictureBox come una "lavagna" dove tu disegni sopra, le varie immagini le disegni con il metodo DrawImage, la prima che disegni sarà sotto le successive, la posizione di ognuna la determini con le coordinate XY, mentre per il ridimensionamento non c'è un metodo automatico, dovresti ridimensionarle a mano. Solo la picturebox può essere ridimensionata, ma le immagini che "disegni" non vengono ne ridimesionate ne centrate.

    per ottenere un ridimensionamento "automatico" dovresti calcolare la dimensione delle immagini sulla base della dimensione della pictureBox (magari attraverso l'evento Resize) ed eventualmente centrarle sempre calcolando la nuova dimensione.

    diciamo che la cosa incomincia a complicarsi un pochino con il resize... ma nulla che non sia risolvibile!

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352
    per farti capire dovrei fare un piccolo editor dove possa mettere un immagine di sfondo e 'appiccicarci' sopra altre immagini (con le trasparenze) e aggiugerci anche del testo...per poi avere un immagine finale da salvare.

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da raffaele.p
    per farti capire dovrei fare un piccolo editor dove possa mettere un immagine di sfondo e 'appiccicarci' sopra altre immagini (con le trasparenze) e aggiugerci anche del testo...per poi avere un immagine finale da salvare.
    per scrivere del testo puoi usare il metodo DrawString (sempre del graphic).
    per il resto segui il consiglio dato sopra, quando hai problemi specifici posta la parte di codice incriminata.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    352
    grazie, dovrei esserci arrivato:

    - man mano che voglio aggiungere un immagine alla pb incremento una lista dove metto il percorso dell'immagine e eventualmente la posizione.
    - nell'evento paint di cui faccio l'overraid rileggo la lista e disegno gli oggetti (immagini o testo) nella pb.
    - se elimino un oggetto dalla lista quando viene eseguito l'evento paint non mi trovo più quell'oggetto disegnato...

    è giusto quello che ho capito?
    ora procedo a realizzarlo
    ma se aggiungo un testo e poi voglio posizionarlo all'inetrno della pb utilizzando il mouse? come potrei fare? Grazie!!!!

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da raffaele.p
    grazie, dovrei esserci arrivato:

    - man mano che voglio aggiungere un immagine alla pb incremento una lista dove metto il percorso dell'immagine e eventualmente la posizione.
    - nell'evento paint di cui faccio l'overraid rileggo la lista e disegno gli oggetti (immagini o testo) nella pb.
    - se elimino un oggetto dalla lista quando viene eseguito l'evento paint non mi trovo più quell'oggetto disegnato...

    è giusto quello che ho capito?
    ora procedo a realizzarlo
    ma se aggiungo un testo e poi voglio posizionarlo all'inetrno della pb utilizzando il mouse? come potrei fare? Grazie!!!!
    si, direi che è corretto
    per "muovere" le scritte (ma anche le immagini) usa l'evento MouseDown per impostare un boleano a true in caso ti trovi sopra la scritta (o l'immagine, per farlo basta controllare l'ultima posizione xy dell'immagine) e le coordinate attuali del mouse ed eventualmente l'indice o il nome dell'immagine risultante, poi nel mouseUp imposti a false il boleano, mentre nel MouseMove controlli il boleano, se true fai il paint delle immagini calcolando la differenza tra la posizione del mouse precedentemente memorizzata dentro MouseDown (quindi quando inizia il Drag) e quella passata dal MouseMove (quella attuale), sulla base di questo calcolo ottieni le nuove posizioni XY dell'immagine che stai "draggando".

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.