webForumDet fria alternativet

Spara bild ifrån pictureBox

.NET

8 svar · 398 visningar · startad av Mc Fetto

Medlem sedan nov. 20022 355 inlägg
Frågan#1

Jag ska försöka spara en bild ifrån en pictureBox men jag vet tji hur jag ska göra. Någon som vet hur man kan göra?
Det ska göras i VB.NET och jag har löst inläsningen till pictureboxen på följande sätt:

    Private Sub open()
        OpenFileDialog.Filter = "bmp Files |*.bmp"
        OpenFileDialog.ShowDialog()

        If OpenFileDialog.FileName <> "" Then
            Try
                Dim myBitmap As New Bitmap(OpenFileDialog.FileName)
                Dim gr As Graphics = PictureBox.CreateGraphics
                gr.DrawImage(myBitmap, 1, 1)
            Catch
                MsgBox("File not found.", , Me.Text)
            End Try
        End If
    End Sub
Medlem sedan aug. 20039 inlägg
#2

Om du kan ändra din metod för att läsa av en Bitmap från fil till:

    Private Sub open()
        OpenFileDialog.Filter = "bmp Files |*.bmp"
        OpenFileDialog.ShowDialog()

        If OpenFileDialog.FileName <> "" Then
            Try
                PictureBox.Image = New Bitmap(OpenFileDialog.FileName)
            Catch
                MsgBox("File not found.", , Me.Text)
            End Try
        End If
    End Sub

Så kan du sedan spara bilden med:

PictureBox.Image.Save(<filnamn>)

Skulle det fungera?

Medlem sedan nov. 20022 355 inlägg
#3

Jag får ut medelande ifrån catch...
Vet inte vad det skulle kunna vara!

Medlem sedan apr. 20012 266 inlägg
#4

Ta bort try satsen så får du ut ett meddelande som gör att du kan felsöka i stället för att gissa :)

Medlem sedan nov. 20022 355 inlägg
#5

Följande felmedelande:

 An unhandled exception of type 'System.NullReferenceException' occurred in Rit - Editor.exe

Additional information: Object reference not set to an instance of an object.

på denna raden:

 PictureBox.Image.Save("lasse.png")
Medlem sedan apr. 20012 266 inlägg
#6

Skulle du kunna skicka med lite mer kod, verkar vara som så att PictureBox inte är instansierat.

Medlem sedan nov. 20022 355 inlägg
#7

Hm, det verkar som detta felmedelande endast kommer då jag ritar i pictureBoxen och vill spara. För om jag laddar in en fil till pictureboxen och sparar den med annat namn så funkar det!

        'PictureBox
        '
        Me.PictureBox.BackColor = System.Drawing.SystemColors.Window
        Me.PictureBox.ContextMenu = Me.ContextMenu1
        Me.PictureBox.Location = New System.Drawing.Point(0, -8)
        Me.PictureBox.Name = "PictureBox"
        Me.PictureBox.Size = New System.Drawing.Size(560, 416)
        Me.PictureBox.TabIndex = 0
        Me.PictureBox.TabStop = False

I ritfunktionen:

    Private Sub Draw(ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim g As Graphics = PictureBox.CreateGraphics
        Dim Loc As Point = New Point(Mouse_X, Mouse_Y)

        If (WhatObjekt = "Rectangle") Then
            Dim sz As Size = New Size(e.X - Mouse_X, e.Y - Mouse_Y)
            Dim rect As Rectangle = New Rectangle(Loc, sz)
            If (MenuFill.Checked) Then
                g.FillRectangle(myBrush, rect)
            Else
                g.DrawRectangle(pen, rect)
            End If

Save funktionen:

     Public Sub Save()
        SaveFileDialog.Filter = "bmp Files |*.bmp"
        'SaveFileDialog.InitialDirectory = SaveFileDialog.GetCurrentDirectory
        SaveFileDialog.ShowDialog()
        'if Cancel button is not selected, load file
        If SaveFileDialog.FileName <> "" Then
            'Try
            Dim myBitmap As New Bitmap(PictureBox.Image)

            myBitmap.Save(SaveFileDialog.FileName)

            'Catch
            ' MsgBox("Some problem, retry!", , Me.Text)
            'End Try
        End If
    End Sub
Medlem sedan aug. 20039 inlägg
#8

Problemet är att när du väljer att "bara" rita på "pictureboxen" så har du inte instansiserat något objekt i egenskapen .Image. Det sker dock om du laddar in en bild från disk osv...

Mitt förslag ovan kvarstår!

Mvh

JohanL

Medlem sedan nov. 20022 355 inlägg
#9

Tack det var där problemet låg, hade lite svårt att få rätsida på det men nu fungerar det! :D

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)