Entwickler-Ecke

Multimedia / Grafik - vereinfachte Speichermöglichkeitenauswahl


GURKE deluxe - Mi 07.09.11 17:55
Titel: vereinfachte Speichermöglichkeitenauswahl
Hallo,
Ich habe folgenden Code:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
private void alsBildSpeichernToolStripMenuItem_Click(object sender, EventArgs e)
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "Bmp Dateien (*.Bmp)|*.Bmp|Emf Dateien (*.Emf)|*.Emf|Exif Dateien (*.exif)|*.exif|" +
        "Gif Dateien (*.Gif)|*.Gif|Jpeg Dateien (*.Jpeg)|*.Jpeg|Png Dateien (*.Png)|*.Png|" +
        "Tiff Dateien (*.Tiff)|*.Tiff|Wmf Dateien (*.Wmf)|*.Wmf|Alle Dateien (*.*)|*.*";
    try
    {
        if (sfd.ShowDialog() == DialogResult.OK)
        {
            Bitmap myBitmap = new Bitmap(this.Size.Width, this.Size.Height);
            this.DrawToBitmap(myBitmap, new Rectangle(00this.Width, this.Height));
            Bitmap myBitmap2 = myBitmap.Clone(new Rectangle(205667 + 121 * (5 + (SAStundenAufbau.SamstagsUnterricht ? 1 : 0) + (SAStundenAufbau.SonntagsUnterricht ? 1 : 0)), SAStundenAufbau.Stunden.Count() * 42 + 23), System.Drawing.Imaging.PixelFormat.Undefined);
            if (sfd.FilterIndex == 1)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
            else if (sfd.FilterIndex == 2)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Emf);
            else if (sfd.FilterIndex == 3)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Exif);
            else if (sfd.FilterIndex == 4)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Gif);
            else if (sfd.FilterIndex == 5)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            else if (sfd.FilterIndex == 6)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png);
            else if (sfd.FilterIndex == 7)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Tiff);
            else if (sfd.FilterIndex == 8)
                myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Wmf);
            MessageBox.Show("\"" + sfd.FileName + "\" wurde erfolgreich gespeichert.");
        }
    }
    catch
    {
        MessageBox.Show("\"" + sfd.FileName + "\" konnte nicht gespeichert werden!");
    }
}


In dem Code wird ein Teil der Form als Bild abgespeichert. Man hat eine relativ große Auswahl an Dateitypen.

Nun finde ich das mit dem 8 "else if"s relativ unschön. Gibt es in irgendeiner Weise folgendes:

C#-Quelltext
1:
2:
string Dateiendung = "Bmp";
myBitmap2.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.FromName(Dateiendung));


Sodass es durch die Dateiendung direkt auf das Imageformat schließen kann.

Gruß
Julian


Th69 - Do 08.09.11 09:08

Hallo,

leg doch einfach ein Array davon an:

C#-Quelltext
1:
2:
3:
4:
5:
6:
using System.Drawing.Imaging;

ImageFormat[] imageFormats = new ImageFormat[]
{
  ImageFormat.Bmp, ImageFormat.Emf, ...
};

und greife dann mit dem Index (null-basiert) darauf zu.
Direkt über die Dateiendung würde ich nicht gehen, da z.B. "jpg" ja auch eine Standard-Extension für "Jpeg"-Dateien (oder "tif" für "Tiff"-Dateien) ist.
Somit würde ich zumindestens diese beiden Endungen noch zu deinem Filter hinzufügen.


Kha - Do 08.09.11 14:08

user profile iconGURKE deluxe hat folgendes geschrieben Zum zitierten Posting springen:
Sodass es durch die Dateiendung direkt auf das Imageformat schließen kann.
Tut das die Bitmap-Klasse nicht automatisch :gruebel: ?