Ukladanie obrázku z picturebox – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ukladanie obrázku z picturebox – Visual Basic – Fórum – Programujte.comUkladanie obrázku z picturebox – Visual Basic – Fórum – Programujte.com

 

Trebor0
Stálý člen
5. 12. 2011   #1
-
0
-

cawte ako mam ulozit obrazok nakreslený v picturebox do JPG pretože som skusil

 

PictureBox1.Image.Save(SaveFileDialog1.FileName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

ako to bolo v jednom tutoriali na webe ale stále ukazuje túto chybu "Object reference not set to instance of an object"

Nahlásit jako SPAM
IP: 84.47.4.–
JMM
~ Redaktor
0
Grafoman
6. 12. 2011   #2
-
0
-

#1 Trebor
nechybí ti tam deklarace? Nevím jaké vše jsou potřeba, s VB 2010 sem nikdy nedělal

Imports System.Drawing

nešlo by třeba použít

PictureBox1.Image.Save(SaveFileDialog1.FileName + ".jpg", ImageFormat.Jpeg)
Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
Trebor0
Stálý člen
6. 12. 2011   #3
-
0
-

aj tak to nefunguje

Nahlásit jako SPAM
IP: 84.47.4.–
liborb
~ Redaktor
+18
Guru
7. 12. 2011   #4
-
0
-

Bez tvého kódu konkrétní rada nebude. Nějaký objekt není inicializovaný a pokud je chyba na tomto řádku, tak jsou tam dva: PictureBox1 a SaveFileDialog1, takže je potřeba vidět zbytek kódu, nejlépe celý.

Nahlásit jako SPAM
IP: 78.80.52.–
Trebor0
Stálý člen
7. 12. 2011   #5
-
0
-

   

Imports System.Drawing

Public Class Form1
    Dim Drawing As Boolean

Private Sub Button58_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button58.Click
        Try
            SaveFileDialog3.ShowDialog()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub SaveFileDialog3_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog3.FileOk
        Try
            PictureBox1.BackgroundImage.Save(SaveFileDialog3.FileName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
Nahlásit jako SPAM
IP: 84.47.4.–
Trebor0
Stálý člen
13. 12. 2011   #6
-
0
-

neviete co mam zle?

Nahlásit jako SPAM
IP: 84.47.4.–
zlz
~ Anonymní uživatel
634 příspěvků
13. 12. 2011   #7
-
0
-

A jak do něj kreslíš?

Nahlásit jako SPAM
IP: 213.211.51.–
Trebor0
Stálý člen
13. 12. 2011   #8
-
0
-

to nerieš celý kód má cez 3000 riadkov ale sem som dal všetko týka toho ako som to naprogramoval aby to ukladalo ale nejde to

Nahlásit jako SPAM
IP: 84.47.4.–
zlz
~ Anonymní uživatel
634 příspěvků
13. 12. 2011   #9
-
0
-

PictureBox ve výchozím stavu nemá Image a přesně na to ta chyba vypadá. Proč ho nemá, i když do něj údajně nějak kreslíš, si teda najdi sám.

Nahlásit jako SPAM
IP: 213.211.51.–
Trebor0
Stálý člen
14. 12. 2011   #10
-
0
-

ja som skusal aj že dačo nakreslim a skusim uložiť a aj tak mito nefunguje .... asi to bude tým že sa kreslí do PictureBox.Image a ja tam mam BackgroundImage.... nemoze to byt tým a ak hej tak ako sa uklado PictureBox.Image

Nahlásit jako SPAM
IP: 84.47.4.–
Trebor0
Stálý člen
14. 12. 2011   #11
-
0
-

ale ak myslíš to stým výchozím obrázkom tak že aby bolo po zapnutí programu picturebox biely a aby sa dalo nanho tak kresliť tak to máám

Nahlásit jako SPAM
IP: 84.47.4.–
pistolnik0
Newbie
15. 12. 2011   #12
-
0
-

#11 Trebor
Tak jak už psal liborb a zlz, je třeba ukázat, jak kreslíš "do toho" PictureBoxu. Jestli kreslíš na Bitmapu pomocí Graphics a tu pak předáš PictureBoxu, mělo by vše fungovat. 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim b As Bitmap = New Bitmap(100, 100)
        Dim g As Graphics = Graphics.FromImage(b)
        Dim p As Pen = New Pen(Color.Red, 5)

        g.Clear(Color.White)

        g.DrawRectangle(p, 10, 10, 50, 30)
        g.Dispose()

        PictureBox1.Image = b

        PictureBox1.Image.Save("C:\Users\Uzivatel\Desktop\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)        
End Sub

Bez nějakého podrobnějšího popisu můžeme jen stěží hádat, kde je chyba.

Nahlásit jako SPAM
IP: 146.102.120.–
Trebor0
Stálý člen
18. 12. 2011   #13
-
0
-

kreslím do toho nejako takto



PictureBox1.CreateGraphics.FillEllipse(Brushes.Black, e.X - 12, e.Y - 12, 25, 25)
Nahlásit jako SPAM
IP: 78.99.196.–
zlz
~ Anonymní uživatel
634 příspěvků
18. 12. 2011   #14
-
0
-

Tak udělej, co psal pistolnik. Nejdřív vytvoř ten Image, třeba ve Form_Load

PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
Graphics.FromImage(PictureBox1.Image).Clear(Color.White)

A kresli do něj

Graphics.FromImage(PictureBox1.Image).FillEllipse(...)

Resp. raději s tím Dispose (nebo v Using bloku), jak to má pistolnik.

Nahlásit jako SPAM
IP: 213.211.51.–
Trebor0
Stálý člen
18. 12. 2011   #15
-
0
-

stale mi to uloží iba čierny obrázok

Nahlásit jako SPAM
IP: 78.99.196.–
zlz
~ Anonymní uživatel
634 příspěvků
18. 12. 2011   #16
-
0
-

Jestli tam máš i ten Clear, tak by neměl být černý. Bez něj budeš mít černou elipsu na nedefinovaném pozadí, které v jpg bude černé.

Nahlásit jako SPAM
IP: 213.211.51.–
Trebor0
Stálý člen
18. 12. 2011   #17
-
0
-

to sa mi potom vymaže ten obrázok ktorý som nakreslil ... (myslim tým že sa uloží ale obrazok sa mi z Pictureboxu vymaže ..)

Nahlásit jako SPAM
IP: 78.99.196.–
zlz
~ Anonymní uživatel
634 příspěvků
18. 12. 2011   #18
-
0
-

Ten Clear je ve Form_Load hned po vytvoření Image. Nemůže to nic vymazat, protože tam ještě nic není.

Nahlásit jako SPAM
IP: 213.211.51.–
Trebor0
Stálý člen
18. 12. 2011   #19
-
0
-

jááj aha tak nic..

Nahlásit jako SPAM
IP: 78.99.196.–
Trebor0
Stálý člen
18. 12. 2011   #20
-
0
-

ale aj tak mi to ukladá na čierno

Nahlásit jako SPAM
IP: 78.99.196.–
zlz
~ Anonymní uživatel
634 příspěvků
18. 12. 2011   #21
-
0
-

Tak máš něco blbě.

Public Class Form1
    Dim StartPoint As Point
    Dim StartImage As Image

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
            g.Clear(Color.White)
        End Using
    End Sub

    Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        StartPoint = e.Location
        StartImage = PictureBox1.Image
        PictureBox1.Image = StartImage.Clone
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If StartImage Is Nothing Then Return

        Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
            g.DrawImage(StartImage, 0, 0)
            g.DrawLine(Pens.Red, StartPoint, e.Location)
        End Using

        PictureBox1.Refresh()
    End Sub

    Private Sub PictureBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        'Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
        '    g.DrawImage(StartImage, 0, 0)
        '    g.DrawLine(Pens.Red, StartPoint, e.Location)
        'End Using

        StartImage.Dispose()
        StartImage = Nothing
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SaveFileDialog1.DefaultExt = "jpg"
        SaveFileDialog1.ShowDialog()
    End Sub

    Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
        PictureBox1.Image.Save(SaveFileDialog1.FileName, Imaging.ImageFormat.Jpeg)
    End Sub
End Class
Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý