Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.Net] PictureBox - salvare immagine "disegnata".

    Ciao,
    ho come l'impressione che questo mio 'problema' in realtà sia una fantozziana 'caz#@*a pazzesca'. Forse è per questo che mi girano maggiormente.
    Ho una semplicissima PictureBox, che uso come pannello da disegno per tablet PC (tramite l'utilizzo della classe inkOverlay).
    Una volta effettuato un qualsiasi scarabocchio, com'è possibile salvarlo? O comunque gestirlo come fosse un semplice oggetto image?

    PictureBox.Image risulta null... anche se l'immagine disegnata è ben visibile...

    Grazie mille...

    Ciao a tutti...
    A.
    Non ho casa. Ho il mio onore.
    Non ho amici. Ho la mia spada.
    Non ho padrone...Sono come il vento che scivola sulla lama...

  2. #2
    Per salvare l'immagine devi usare:
    codice:
    PictureBox1.Image.Save(PercorsoFile,Formato)

  3. #3
    Ciao Mardock, inanzitutto grazie per la risposta... ho già provato, ma mi solleva un'eccezione.
    Questo perchè PictureBox.image risulta null, anche se graficamente il disegno c'è...
    Leggendo in giro, ho notato che in alcuni casi, soprattutto per quanto riguarda la modifica di immagini già esistenti, si usa in parallelo all'oggetto image, anche l'oggetto graphic...
    Il problema è che il secondo utilizza il primo come parametro, per poter apportare delle modifiche. E come succede sempre in questi casi io necessito di un'immagine creata ad hoc.

    Certo... in alternativa posso usare una 'base di partenza', magari .bmp...

    Ciaooo
    A.
    Non ho casa. Ho il mio onore.
    Non ho amici. Ho la mia spada.
    Non ho padrone...Sono come il vento che scivola sulla lama...

  4. #4
    Buongiorno...
    finalmente si scorge una flebile luce in fondo al tunnel... Trovato una soluzione al problema, che come supponevo, ha le radici proprio nell'uso dell'InkOverlay...

    Alla Load imposto l'oggetto inkCollector (usato per disegnare), passandogli l'handle del controllo usato come 'tavola', nel mio caso la PictureBox.
    codice:
    objPen = New InkCollector(pbFirma.Handle)
    objPen.Enabled = True
    Tramite l'evento click di un Command, richiamo il seguente codice:
    codice:
    Dim objBufferImage() As Byte                  'Buffer di byte 
    Dim objStreamImage As MemoryStream     'serve per la conversione in oggetto immagine
            
    Try
                'ObjInk (ovvero il disegno vero e proprio) viene serializzato in un flusso di byte
                objBufferImage = objPen.Ink.Save(PersistenceFormat.Gif)
                'In FileStream inserisco il contenuto del buffer (x salvare immagine)
                objStreamImage = New MemoryStream(objBufferImage, 0, objBufferImage.Length)
                'Ricavo obj Immagine
                imgFirma = Image.FromStream(objStreamImage)
                
                'Visualizzo l'immagine disegnata in un'altra PictureBox...
                pbMostraImg.Image = imgFirma
    
            Catch ex As Runtime.InteropServices.COMException
                If ex.ErrorCode = -2147418113 Then  'Campo immagine Vuoto...
                    MsgBox("Mancaaaaaaaa....", MsgBoxStyle.Exclamation, "")
                Else
                    MsgBox("Errore " & ex.Message, MsgBoxStyle.Critical, "")
                End If
            Catch ex As Exception
                MsgBox("Errore " & ex.Message, MsgBoxStyle.Critical, "")
            End Try
    Una volta ottenuto l'oggetto image è possibile visualizzarlo, salvarlo ecc ecc.

    Ciao a todos.
    A.
    Non ho casa. Ho il mio onore.
    Non ho amici. Ho la mia spada.
    Non ho padrone...Sono come il vento che scivola sulla lama...

  5. #5
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    ciao, io ho un probelma simile e per non aprire un nuovo topic aggiungo in coda la mia domanda

    io ho un panel su cui disegno tramite System.Drawing2D dei grafici

    quando voglio salvare il grafico uso

    codice:
    If SaveFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
        Dim img As Bitmap
        img = New Bitmap(pbFx.Image)
        img.Save(SaveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Bmp)
    End If
    solo che in pbFx.Image non c'è niente perchè io non assegno alla PictureBox una immagine ma la disegno al suo interno...qualche idea??

  6. #6

    ...UP...

    Ciao a tutti,
    anche io ho lo stesso problema: vorrei salvare come bitmap un semplice disegno creato in un
    panel (ma eventualmente posso usare anche una picturebox).

    Sto cercando di utilizzare la stessa soluzione di AsanoRonin ma non riesco a capire l'utilizzo dell' objpen e dell'inkcollector.
    In sostanza, la soluzione per catturare il disegno in una "image" e' farlo utilizzando il comando image.fromstream, ma non mi è chiaro come creare lo stream: potreste darmi delle delucidazioni al riguardo?

    Grazie mille per l'aiuto che potete darmi, so di essere alle prime armi, ma sono bloccata su questa cosa da parecchio...
    LLL

    ----------------------------------------------------------------------
    P.S. Lascio qua sotto il codice del disegno:

    Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

    Dim Penna As New Pen(Color.Black, 2)
    Dim Pennello1 As New SolidBrush(Color.Beige)
    Dim Pennello2 As New SolidBrush(Color.White)

    Dim x0 As Single = 0.5 * PictureBox1.Width
    Dim y0 As Single = 0.5 * PictureBox1.Height
    Dim Re As Single = 100
    Dim Ri As Single = 50

    Dim RectExt As New Rectangle(x0 - 0.5 * Re, y0 - 0.5 * Re, Re, Re)
    Dim RectInt As New Rectangle(x0 - 0.5 * Ri, y0 - 0.5 * Ri, Ri, Ri)

    e.graphics.DrawEllipse(Penna, RectExt)
    e.graphics.FillEllipse(Pennello1, RectExt)
    e.graphics.DrawEllipse(Penna, RectInt)
    e.graphics.FillEllipse(Pennello2, RectInt)

    End Sub

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.