Laden...

falsche Konvertierung beim Speichern des Inhaltes einer PictureBox in eine Bilddatei

Erstellt von renzH vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.046 Views
R
renzH Themenstarter:in
2 Beiträge seit 2021
vor 2 Jahren
falsche Konvertierung beim Speichern des Inhaltes einer PictureBox in eine Bilddatei

Hi,
ich speichere den Inhalt einer PictureBox mit folgendem Code:


private void ToolStMnuItemGrafSp_Click(object sender, EventArgs e)
        {
            string Pfad = @"D:\\Progs\\MTSpannung\\Grafiken\\";
            SaveFileDialog sFD = new SaveFileDialog();
            sFD.Filter = "jpg files (*.JPG)|*.jpg|png files (*.PNG)|*.png";
            sFD.InitialDirectory = Pfad;

            Bitmap img = new Bitmap(PicBox1.Width + 10, PicBox1.Height + 10);
            PicBox1.DrawToBitmap(img, new Rectangle(0, 0, PicBox1.Width, PicBox1.Height));

            if (sFD.ShowDialog() == DialogResult.OK)
            {
                Pfad = sFD.FileName;
                try
                {
                    if (sFD.Filter.Contains("jpg"))
                    {
                        img.Save(Pfad, ImageFormat.Jpeg);
                    }
                    else if (sFD.Filter.Contains("png"))
                    {
                        img.Save(Pfad, ImageFormat.Png);
                    }
                }
                catch (Exception SaveException)
                {
                    MessageBox.Show("Verzeichnisauswahl ungültig!\n\n\nCode:\n" 
                    + SaveException.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

Die so erzeugten Bilddateien werden zwar in anderen Grafikprogrammen korrekt angezeigt, jedoch erscheint bei Dateien, die nicht im jpeg-Format gespeichert wurden, die im Anhang ausgewiesene Fehlermeldung. Offenbar wird also in C# keine Konvertierung vorgenommen. Kann mir jemand sagen, warum das so ist und wie der Fehler abgestellt werden kann? VielenDank.

D
30 Beiträge seit 2021
vor 2 Jahren

Hi renzH,

was sagt denn sfd.Filter wenn du einen entsprechenden Breakpoint setzt?

P
441 Beiträge seit 2014
vor 2 Jahren

Ist schon eine Weile her, aber ich vermute du prüfst die falsche Property.

Path.GetExtension(sFD.FileName)

Sollte dir das korrekte Ergebnis geben. In Filter steht immer der Filter.

S
248 Beiträge seit 2008
vor 2 Jahren

Ist schon eine Weile her, aber ich vermute du prüfst die falsche Property.

So ist es.

Filter enthält alle Auswahlmöglichkeiten. Du musst die FilterIndex Property verwenden. (Der Startindex ist 1).

R
renzH Themenstarter:in
2 Beiträge seit 2021
vor 2 Jahren

Hi Papst, vielen Dank für die schnelle Antwort. Die Auswahl über if(sFD.FilterIndex == 1) und if(sFD.FilterIndex == 2) löst das Problem. Dank auch an Spook!