Errore imagine

di il
20 risposte

Errore imagine

Buongiorno, ho avuto qualche intoppo, sono giorni che sono rimasto bloccato il code è questo:

  ' Function for graphics variables
    Dim g As Graphics
    Dim BBG As Graphics
    Dim BB As Bitmap = New Bitmap(200, 350, Imaging.PixelFormat.Format32bppArgb)
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' initalize graphics object
        g = Wiewer.CreateGraphics
          BackGround = My.Resources.Background ' source img
        end sub
        
       ' provo a creare un box da 200x350 con label e barcode
       
       Sub PaperPrewiewToPrint
         ' set a card background 
        g.DrawImage(BackGround, 0, 0, 200, 350)
        
         ' Draw qrcode
            g.DrawImage(QrCodeIMG,25, 10, 180, 180)
     g.DrawString(Format($" Messaggio: {TxtMex.Text} - {Now}"), New Font("Consolas", 12, Font.Style.Bold), Brushes.Black, 15,190 , f)
    
      ' copy backbuffer to graphics object
        g = Graphics.FromImage(BB)

        ' draw backbuffer to screen 
        BBG = Wiewer.CreateGraphics

        BBG.DrawImage(BB, 0, 0, Wiewer.Width, Wiewer.Height)
        ' fix overdraw
        g.Clear(Color.White)

        FormatPrewiew.Image = BB
        g.Dispose()
       
   End Sub
Ecco qui il problema, nella parte di prewiew mi da nullo come se in quella schermata non ci fosse nulla, ma vedo qr code e label con la data e inoltre nella parte formatprewiew da problemi con la stampa


 Private Sub BtnPrnt_Click(sender As Object, e As EventArgs) Handles BtnPrnt.Click
                 Dim ppd As New PrintPreviewDialog
                ppd.Document = PrintDocument1
                PrintDocument1.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
                ppd.WindowState = FormWindowState.Maximized
                ppd.ShowDialog()
 End Sub
 Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.DrawImage(FormatPrewiew.Image, 30, 30)
    End Sub
  
 
da sempre errori e ancora sbaglio qualcosa e su online è ambiguo ed confusionario
Ah ho importato questi:


Imports ThoughtWorks.QRCode.Codec
Imports System.Drawing
Imports System.IO
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.Drawing.Printing

20 Risposte

  • Re: Errore imagine

    Per aiutarti mancano un bel po' di info:

    1) ThoughtWorks.QRCode hai usato questo? ThoughtWorks.QRCode.LiuHao
    
    BackGround = My.Resources.Background ' source img
    
    2) BackGround cosè? dove lo hai dichiarato?
    
    g.DrawImage(QrCodeIMG, 25, 10, 180, 180)
    
    3) QrCodeIMG cosè? dove lo hai dichiarato?
    
    g.DrawString(Format($" Messaggio: {TxtMex.Text} - {Now}"), New Font("Consolas", 12, Font.Style.Bold), Brushes.Black, 15, 190, f)
    
    4) f cosè? dove lo hai dichiarato?
    
    FormatPrewiew.Image = BB
    
    5) FormatPrewiew cosè? dove lo hai dichiarato?
    
    g = Wiewer.CreateGraphics
    
    6) Wiewer, è una picturebox? (Wiewer si scrive Viewer, prewiew si scrive preview)

    Cosa vuoi fare?
  • Re: Errore imagine

    Scusa ma vuoi fare un barcode o qrcode?

    Io installo ActiveBarcode 6
    Nella casella strumenti sotto Generale hai l'oggetto
    Lo trascini nel form e gli assegni quello che vuoi senza importare altro. 2 secondi e hai risolto se ho capito bene.
  • Re: Errore imagine

    Grazie per la risposta celere!
    1: Ho usato la libreria ThoughtWorks.QRCode di haoersheng (su Nuget)

    2:
    
    Public BackGround As Image
    BackGround = My.Resources.Background ' source img
    
    è lo sfondo disegnato col paint ed è lo sfondo del cosidetto scontrino (mi piace le cose tammarate xD)
    3:
    
    Public QRcodeimg as image
    
      Private Sub TxtQR_TextChanged(sender As Object, e As EventArgs) Handles TxtQR.TextChanged
      
            Try
                Dim QRcode As New QRCodeEncoder
                QRcode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE
                QRcode.QRCodeForegroundColor = Color.Black
                QRcode.QRCodeBackgroundColor = Color.White
                QRcode.QRCodeVersion = 7
                QRcode.QRCodeScale = 4
                QRcode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H
                Dim qrcodeImage As Image = QRcode.Encode(TxtQR.Text)
                QRcodeImg = qrcodeImage
                    
            Catch ex As Exception
                MsgBox($"Error: {ex.Message}")
                      End Try
        End Sub
    
    4:
    
     Dim f As New StringFormat
                f.Alignment = StringAlignment.Center
                f.LineAlignment = StringAlignment.Center
                f.FormatFlags = StringFormatFlags.FitBlackBox
                f.FormatFlags = StringFormatFlags.NoClip
    
                g.DrawString(Format($" Messaggio: {TxtMex.Text} - {Now}"), New Font("Consolas", 12, Font.Style.Bold), Brushes.Black, 15,190 , f)
                
    
    5: FormatPrewiew è picture box

    6:
    
    bbg = Wiewer.CreateGraphics
    Viewer è un picturebox
    
    le ringrazio per la correzione, non mastico bene inglese e sto facendo una app che crea qr code col testo e data affinché posso stampare con una stampante simile dymo (comprato dai cinesi) e lo metto nei scaffali
  • Re: Errore imagine

    orione1976 ha scritto:


    Scusa ma vuoi fare un barcode o qrcode?

    Io installo ActiveBarcode 6
    Nella casella strumenti sotto Generale hai l'oggetto
    Lo trascini nel form e gli assegni quello che vuoi senza importare altro. 2 secondi e hai risolto se ho capito bene.
    qr code, deduco che cellulare non legge barcode
    comunque grazie per consiglio!
  • Re: Errore imagine

    Ciao certo, i cellulari leggono sia qr che barcode normali... con quello che ti ho suggerito, carichi l'oggetto nel form poi decidi dalle sue opzioni se barcode o qr code e tutte le codifiche... è come un picture boxe... 30 secondi ed hai risolto senza dover far altro e puoi salvare o stampare in un attimo... prova...
  • Re: Errore imagine

    Ah, non ero a conoscenza, dunque l'ho provato ed ho sempre stesso problema, ossia non carica:
    
      g.DrawString(Format($" Messaggio: {TxtMex.Text} - {Now}"), New Font("Consolas", 12, Font.Style.Bold), Brushes.Black, 15,190 , f)
      
      
    e
    
    Public BackGround As Image
    BackGround = My.Resources.Background ' source img
    
    hai idee come risolvere?
  • Re: Errore imagine

    L'errore ce l'hai perchè la proprietà FormatPrewiew.Image è Null.
    Perché è Null? perché non gli assegni mai un'immagine, nel senso che quando premi il button: BtnPrnt, non richiami la funzione: Sub PaperPrewiewToPrint() che gli dovrebbe assegnare un'immagine...
    
       Private Sub BtnPrnt_Click(sender As Object, e As EventArgs) Handles BtnPrnt.Click
            PaperPrewiewToPrint()
    
            Dim ppd As New PrintPreviewDialog
            ppd.Document = PrintDocument1
            PrintDocument1.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
            ppd.WindowState = FormWindowState.Maximized
            ppd.ShowDialog()
        End Sub
    
    così l'errore scompare, ma non significa che il debug è finito qui, altri errori hai fatto che devi eliminare.
  • Re: Errore imagine

    Daniel KR ha scritto:


    Ah, non ero a conoscenza, dunque l'ho provato ed ho sempre stesso problema, ossia non carica:
    
      g.DrawString(Format($" Messaggio: {TxtMex.Text} - {Now}"), New Font("Consolas", 12, Font.Style.Bold), Brushes.Black, 15,190 , f)
      
      
    e
    
    Public BackGround As Image
    BackGround = My.Resources.Background ' source img
    
    hai idee come risolvere?
    Guarda che il Nuget che hai scelto funziona, la vita te la sei complicata da solo...
    se nella tua sub: TxtQR_TextChanged aggiungi una riga:
    
       Private Sub TxtQR_TextChanged(sender As Object, e As EventArgs) Handles TxtQR.TextChanged
    
            Try
                Dim QRcode As New QRCodeEncoder
                QRcode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE
                QRcode.QRCodeForegroundColor = Color.Black
                QRcode.QRCodeBackgroundColor = Color.White
                QRcode.QRCodeVersion = 7
                QRcode.QRCodeScale = 4
                QRcode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H
                Dim qrcodeImage As Image = QRcode.Encode(TxtQR.Text)
                QRcodeimg = qrcodeImage
                FormatPreview.Image = qrcodeImage
    
            Catch ex As Exception
                MsgBox($"Error: {ex.Message}")
            End Try
        End Sub
    
    Vedrai il QRcode corrispondente, mentre scrivi nella textbox: TxtQR

    Tutti passaggi in molteplici bitmap e picturebox sono inutili, in qrcodeImage hai il tuo QRcode che puoi stampare, come vuoi senza ulteriori passaggi, anche aggiungere testo è semplice, se ci dici quale risultato vuoi ottenere...

    Attenzione ho corretto: FormatPrewiew in FormatPreview
  • Re: Errore imagine


    Tutti passaggi in molteplici bitmap e picturebox sono inutili, in qrcodeImage hai il tuo QRcode che puoi stampare, come vuoi senza ulteriori passaggi, anche aggiungere testo è semplice, se ci dici quale risultato vuoi ottenere...

    Attenzione ho corretto: FormatPrewiew in FormatPreview
    la mia intenzione era di fare una cosa simile senza pretese (lho realizzato mediante paint, piu o meno vorrei ottenere una cosa simile)
    ah dimenticavo qr code l'ho realizzato col app di vb, ma non so come far rendere " non nullo" e inoltre mi spunta questo errore
    Allegati:
    30764_143080d39a6ce5d58bdd4eaa017e66e8.png
    30764_143080d39a6ce5d58bdd4eaa017e66e8.png

    30764_c1fcee30e66f3869a336e0bd9d4b7341.png
    30764_c1fcee30e66f3869a336e0bd9d4b7341.png
  • Re: Errore imagine

    L'errore già te l'ho spiegato....

    Rubik ha scritto:


    L'errore ce l'hai perchè la proprietà FormatPrewiew.Image è Null.
    Perché è Null? perché non gli assegni mai un'immagine, nel senso che quando premi il button: BtnPrnt, non richiami la funzione: Sub PaperPrewiewToPrint() che gli dovrebbe assegnare un'immagine...
    Visto che non è stato sufficiente dettaglio di più:
    quando il programma è in esecuzione e premi il bottone: BtnPrnt, il codice che viene eseguito contiene l'istruzione: ppd.Document = PrintDocument1
    significa che la successiva: ppd.ShowDialog(), aprirà una finestra di dialogo con l'anteprima dell'immagine recuperata nella routine: Private Sub PrintDocument1_PrintPage
    Cosa c'è scritto in questa routine?: e.Graphics.DrawImage(FormatPrewiew.Image, 30, 30)
    Visto che alla pressione del button: BtnPrnt, la proprietà FormatPrewiew.Image non è mai stata inizializzata, è Null e ricevi l'errore.


    prova questo codice, modificalo per ottenere il tuo risultato, se non riesci chiedi.
    
    Imports ThoughtWorks.QRCode.Codec
    Imports System.Drawing.Printing
    
    ' installare NuGet: ThoughtWorks.QRCode di haoersheng
    
    Public Class Form1
    
        Public QRcodeimg As Image
    
        Private Sub BtnPrnt_Click(sender As Object, e As EventArgs) Handles BtnPrnt.Click
            Dim ppd As New PrintPreviewDialog
            ppd.Document = PrintDocument1
            PrintDocument1.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
            ppd.WindowState = FormWindowState.Maximized
            ppd.ShowDialog()
        End Sub
    
        Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
            e.Graphics.DrawImage(Viewer.Image, 30, 30)
        End Sub
    
        Private Sub TxtQR_TextChanged(sender As Object, e As EventArgs) Handles TxtQR.TextChanged
            creaQRimage()
            PaperPreviewToPrint()
        End Sub
    
        Private Sub TxtMex_TextChanged(sender As Object, e As EventArgs) Handles TxtMex.TextChanged
            creaQRimage()
            PaperPreviewToPrint()
        End Sub
    
        Private Sub creaQRimage()
            Try
                Dim QRcode As New QRCodeEncoder
                QRcode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE
                QRcode.QRCodeForegroundColor = Color.Black
                QRcode.QRCodeBackgroundColor = Color.White
                QRcode.QRCodeVersion = 7
                QRcode.QRCodeScale = 4
                QRcode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H
                QRcodeimg = QRcode.Encode(TxtQR.Text)
                Me.Text = QRcodeimg.Size.ToString
            Catch ex As Exception
                MsgBox($"Error: {ex.Message}")
            End Try
        End Sub
    
        Sub PaperPreviewToPrint()
            Dim BB As Bitmap = New Bitmap(200, 350, Imaging.PixelFormat.Format32bppArgb)
            Dim g As Graphics = Graphics.FromImage(BB)
    
            ' g.DrawImage(My.Resources.Background, 0, 0, 200, 350) ' togli il rem per aggiungere il tuo sfondo
            Dim f As New StringFormat
            f.Alignment = StringAlignment.Center
            g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
            g.DrawImage(QRcodeimg, 10, 10, QRcodeimg.Width, QRcodeimg.Height)
            g.DrawString(Now.ToString(), New Font("Consolas", 12, FontStyle.Bold), Brushes.Black, BB.Width / 2, 210, f)
            g.DrawString(TxtMex.Text, New Font("Consolas", 12, FontStyle.Bold), Brushes.Black, BB.Width / 2, 230, f)
            Viewer.Image = BB
        End Sub
    End Class
    
    Il codice è il tuo, ho tolto il superfluo e corretto gli errori.

    Nel form ci sono:
    • picturebox: Viewer 200x350
    • textbox: TxtMex
    • textbox: TxtQR
    • button: BtnPrnt

    QRcode.png
    QRcode.png

  • Re: Errore imagine

    Grazie! finalmente ho capito dove ho sbagliato
    sbagliando s'impara ^^
  • Re: Errore imagine

    Scusa se riprendo la discussione, ma c'è una cosa che non mi è chiaro, ho provato a lasciare i campi vuoti e mi da errore, fin qua mi sembra ovvio, metto try.. catch... end try... e non mi spunta msgbox bensi codesto avviso. Come posso risolvere?
    Allegati:
    30764_161be3f486f295edd6875250fb46e51e.png
    30764_161be3f486f295edd6875250fb46e51e.png
  • Re: Errore imagine

    Metti un'immagine in QRcodeImg, prima di richiamare la funzione...
    L'errore è chiaro come il Sole: QRcodeImg era Nothing.

    Se riguardi il mio codice prima di richiamare: PaperPreviewToPrint()
    richiamo: creaQRimage()
    che mette in: QRcodeImg, l'immagine del QRcode creata.
    
        Private Sub TxtQR_TextChanged(sender As Object, e As EventArgs) Handles TxtQR.TextChanged
            creaQRimage()
            PaperPreviewToPrint()
        End Sub
    
        Private Sub TxtMex_TextChanged(sender As Object, e As EventArgs) Handles TxtMex.TextChanged
            creaQRimage()
            PaperPreviewToPrint()
        End Sub
    
  • Re: Errore imagine

    Giusto, non l'avevo pensato, per lei è facile a capire dove sta l'errore nel mentre è da qualche mese che sto imparando a programmare col vb ^^ comunque grazie ancora!
Devi accedere o registrarti per scrivere nel forum
20 risposte