VB.NET - In Paintbox Objekte erzeugen (zeichnen)

Ev. liegt es am OpenFile() Stream vom SaveFileDialog.

Probiers einfach mal in dem du das FileStream selbst erstellst:
Code:
fs = new FileStream(...)

Und warum hast du die Überprüfung für DialogResult.OK entfernt?
Code:
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName <> "" Then

Und vielleicht mal im debuggen schauen welchen Wert SaveFileDialog1.FileName hält.

Und Streams sind IDisposable, ruf also am besten noch zum Schluss meinStream.Dispose() auf
 
Hab ich auch schon vermutet, welche Parameter muss ich denn übergeben? Man benötigt ein Objekt, und da wüsste ich nicht wie ich das erstellen kann ohne mit der OpenFile Methode von dem Dialog...
Werde gleich erstmal den Dialog jedes mal neu erzeugen.


Gruß David
 
meinst du das mit Parameter?
C#:
fs = new FileStream(SaveFileDialog1.FileName, FileMode.Create);
Namespace: System.IO
 
Zuletzt bearbeitet von einem Moderator:
Habe den Code ausprobiert, hat aber leider nichts genützt. Habe nun folgenden Code verwendet, in welchem ich den Dialog erst beim Button-Klick erzeuge:
Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'SaveFileDialog einrichten:
        Dim SaveFileDialog1 As New SaveFileDialog
        SaveFileDialog1.Title = "Bild speichern"
        SaveFileDialog1.Filter = "JPEG-Dateiformat (*.jpg)|*.jpg|Windows Bitmap (*.bmp)|*.bmp|Graphics Interchange Format (*.gif)|*.gif|PNG-Dateiformat (*.png)|*.png|TIFF-Dateiformat (*.tif)|*.tif"
        SaveFileDialog1.FilterIndex = 1

        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            If SaveFileDialog1.FileName <> "" Then
                Dim fs As System.IO.FileStream = New System.IO.FileStream(SaveFileDialog1.FileName, System.IO.FileMode.Create)
                ' Saves the Image in the appropriate ImageFormat based upon the
                ' file type selected in the dialog box.
                ' NOTE that the FilterIndex property is one-based.
                Dim Bild As Image = My.Resources._17052008109

                Dim Puffer As Graphics = Graphics.FromImage(Bild)
                Puffer = Objekte.SaveToImage(Bild, PictureBox1, Objekte.Element)

                Select Case SaveFileDialog1.FilterIndex
                    Case 1
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)
                    Case 2
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp)
                    Case 3
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Gif)
                    Case 4
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Png)
                    Case 5
                        Bild.Save(fs, System.Drawing.Imaging.ImageFormat.Tiff)
                End Select
                fs.Close()
                Puffer.Dispose()
                Bild.Dispose()
            End If
        End If
    End Sub

Jetzt kann ich nacheinander die Bilder in beliebigen Formaten speichern. Hier noch eine Übersicht der Dateigrößen bei einer Auflösung von 2484x1418Pixel:

JPEG: 0,466MB
BMP: 10MB
GIF: 0,912MB
PNG: 6,20MB
TIFF: 8,96MB

Ich denke mal, dass die Werte ok sind, ist eben ein 24-Bit Bild mit 300dpi.



Gruß David
 
da fehlt noch SaveFileDialog1.Dispose() ;)
Und noch beim ShowDialog den Owner (dein Formular) übergeben.

Zwar schon komisch warums vorhin nicht funktioniert hat, aber wenns nu läuft.
 
So hab die Sachen noch reingeschrieben. Schon merkwürdig manchmal, aber irgendeinen Grund wirds gehabt haben...


Gruß David
 
Zurück