Picture.Save   zodpovězená otázka

VB.NET, WinForms

Zdravim. Cez kod som nakreslil nejaky obrazok. Mam tento kod na jeho ulozenie:

Dim strImgName As String
        Dim dlgSave As New SaveFileDialog()
        dlgSave.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp"
        If dlgSave.ShowDialog() = Windows.Forms.DialogResult.OK Then
            strImgName = dlgSave.FileName
            If strImgName.EndsWith("jpg") Then
                Me.PictureBox2.Image.Save(strImgName, ImageFormat.Jpeg)
            End If
            If strImgName.EndsWith("gif") Then
                Me.PictureBox2.Image.Save(strImgName, ImageFormat.Gif)
            End If
            If strImgName.EndsWith("bmp") Then
                Me.PictureBox2.Image.Save(strImgName, ImageFormat.Bmp)
            End If
        End If

Skusal som uz aj ine sposoby ulozenia, ktore som nasiel na nete, ale vzdy mi vyhadzuje tuto chybovu spravu:

"NullReferenceException was unhadled - Object reference not set to an instance of an object."

a vysvieti mi tento riadok:

Me.PictureBox2.Image.Save(strImgName, ImageFormat.Jpeg)

Neviete mi niekto poradit, kde robim chybu a co treba urobit? Dakujem...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

NullReferenceException bude pravděpodobně způsobeno tím, že v PictureBoxu nebyl načten žádný obrázek a tudíž instance třídy Image od které jste volal metodu Save vyvolala tuto vyjímku.

Řádek Me.PictureBox2.Image.Save(strImgName, ImageFormat.Jpeg) znamená uložení obsahu obrázku do souboru určeného proměnnou strImgName ve formátu JPEG.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No ja som ziadny obrazok nenacital, ale nakreslil pomocou kodu (nakreslil som pomocou kodu - línie, polygony, kruhy - jeden graf ktory vyuzivam vo svojom odbore) a ten chcem ulozit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud chcete vykreslit něco na PictureBox a pak to ukládat jako obrázek, musíte vykreslování trošku upravit. Když kreslíte jen tak na komponentu, nikam se to neukládá a když tu kresbu překryjete třeba jiným oknem, ztratí se a musí se nakreslit znovu. Pokud to chcete ukládat do obrázku, musíte nejprve vytvořit objekt Bitmap a kreslit do něj:

    'vytvořit nový prázdný obrázek o velikosti PictureBoxu
    Me.PictureBox2.Image = New Bitmap(Me.PictureBox2.Width, Me.PictureBox2.Height)
    'získat jeho objekt Graphics
    Dim g As Graphics = Graphics.FromImage(Me.PictureBox2.Image)

Nyní můžete provést samotné vykreslení, ale kreslit musíte do objektu g (a ne třeba do e.Graphics).

Pak vám váš kód pro uložení bude fungovat.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Aha. Doteraz som nevedel ze to kreslim len na komponentu. Ja som totiz dlhodobo robil vo VB6 a este nepoznam vela zmien vo VB.NET 2005. Uz vsetko funguje ako ma - dakujem.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

děkuji za pomoc tato rada mi také pomohla. Uloží se to sice, ale hned nevykreslído picture boxu (Name:PaintBox). Až po uložení do pictureboxu.

Private Sub PaintKvádr()
        ODSA = Val(Odsazeni.Text)
        KRESL = 2

        A = Val(A2.Text)
        B = Val(B2.Text)
        C = Val(C2.Text)
        G.Clear(Color.White)
        G.DrawRectangle(Pens.Black, ODSA + A + C, ODSA, A, C)
        G.DrawRectangle(Pens.Black, ODSA + A + C, ODSA + C, A, B)
        G.DrawRectangle(Pens.Black, ODSA + A + C, ODSA + C + B, A, C)
        G.DrawRectangle(Pens.Black, ODSA + A, ODSA + C, C, B)
        G.DrawRectangle(Pens.Black, ODSA + A, ODSA + C, A, B)
        G.DrawRectangle(Pens.Black, ODSA + A + C + A, ODSA + C, C, B)
    End Sub

    Private Sub PaintBox_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PaintBox.Paint
            PaintKrychle()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        PaintKvádr()
    End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback