Announcement

Collapse
No announcement yet.

PNG mit 8bit Farbtiefe speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PNG mit 8bit Farbtiefe speichern

    Ich habe folgenden Code:
    Code:
    Bitmap tmp = b.GetBitmap();
    
                        if (saveFileDialog1.FilterIndex == 1)
                        {
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                        }
                        if (saveFileDialog1.FilterIndex == 2)
                        {
    
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                        }
                        if (saveFileDialog1.FilterIndex == 3)
                        {
                            tmp=b.To8bppIndexed();
                            
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Gif);
                            MessageBox.Show("Bild wird in 256 Farben umgewandelt. Es können Farbverluste auftreten.", "Qualitätsverlust", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        if (saveFileDialog1.FilterIndex == 4)
                        {
    
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Emf);
                        }
                        if (saveFileDialog1.FilterIndex == 5)
                        {
    
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Wmf);
                        }
                        if (saveFileDialog1.FilterIndex == 6)
                        {
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Tiff);
                        }
                        if (saveFileDialog1.FilterIndex == 7)
                        {
                            tmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Png);
                        }
    Wenn ein Bild im 8bit indexed Format vorliegt wird es als bmp auch mit 8bit gespeichert. Als png jedoch immer mit 24 oder 32bit. Wie kann ich es als 8bit indexed PNG speichern?
    Versuchte schon den folgenden Code:
    Code:
    System.Drawing.Imaging.ImageCodecInfo[] ImgCodecs;
                            System.Drawing.Imaging.EncoderParameters ImgParams;
                            ImgCodecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
                            ImgParams = new System.Drawing.Imaging.EncoderParameters(1);
                            ImgParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 8L);
                            tmp.Save(saveFileDialog1.FileName, ImgCodecs[1], ImgParams);
    aber das hat nicht funktioniert (auch nicht anstatt 8L eine byte-Variale einzusetzen). Das Bild wurde immer mit 32bit gespeichert.

    Vielen Dank

  • #2
    Hallo,

    zur Sache kann ich nichts sagen; ich habe mich bisher nur einmal mit Farbtiefen befasst. Aber zum Code-Format: Wäre eine switch-Anweisung nicht viel übersichtlicher (abgesehen davon, dass immer nur ein if-Zweig benötigt wird und alle anderen überflüssigerweise auch noch abgefragt werden)?

    Jürgen

    Comment


    • #3
      auch die Zuweisung in die tmp Variable ist nicht unbedingt nötig.
      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

      Comment


      • #4
        Klar wäre das übersichtlicher - aber ich fing halt nur mit zwei FOrmaten an und fügte dann immer laufende Abfragen hinzu. Die tmp-Variable, ja stimt, weiss auch nicht wieso ich darauf kam; es wird ja eh ein Verweis gespeichert. Aber hauptsächlich würde ich doch nun gerne die 256 Farben-png im richtigen Format speichern...

        Comment

        Working...
        X