Samstag, Juni 6, 2020

Problem mit PNG-Bildern in C#

Arbeiten in Visual Studio 2008. Ich bin versucht zu zeichnen, auf ein PNG-Bild und speichern Sie das Bild erneut.

Ich Folgendes tun:

private Image img = Image.FromFile("file.png");
private Graphics newGraphics;

Und im Konstruktor:

newGraphics = Graphics.FromImage(img);

Gebäude der Lösung gibt keine Fehler. Wenn ich versuche es zu starten, bekomme ich diese:

Ein Graphics-Objekt kann nicht erstellt werden
aus einem Bild mit einem indizierten
pixel-format.

Ich habe nicht viel Erfahrung mit der Verwendung von Bildern in C#. Was bedeutet das und wie kann ich Abhilfe schaffen?

EDIT: debugging, Visual Studio sagt mir, dass das Bild hat eine format8bppindexed Pixel-Format.

Also, wenn ich nicht verwenden können, die Grafik Klasse, was brauche ich?

EDIT2: Nach dem Lesen diese, ich denke, es ist sicher anzunehmen, dass ich besser stick JPG-Dateien bei der Arbeit mit GDI+, no?

EDIT3: meine mit-Aussagen:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
  • Viel Glück mit dieser Methode? c-sharpcorner.com/UploadFile/rrraman/…
  • Ich benutze PNG-Dateien, die mit dem Graphics-Objekt alle Zeit. Poste einen link zu der PNG-Datei, die Sie verwenden, und wir werden sehen, was falsch mit ihm.
  • Intern GDI arbeitet mit Bitmaps, JPG ist komprimiert und nicht wirklich toll, ein komprimiertes Bild für die Arbeit mit den raw-Daten. Dein Bild ist 8bppIndexed, dies ist ein Bitmap-format, in dem die Farben gespeichert werden, die in der palette nicht die pixel-Daten. Die Grafik-Objekte können nicht ändern, werden die Pixelwerte direkt, wie, dass wird sich nicht ändern es. Sie brauchen, um zu konvertieren, um 24bppRGB
InformationsquelleAutor KdgDev | 2009-10-26

2 Kommentare

  1. 10

    Ohne eine bessere PNG-Bibliothek, die unterstützt indizierte PNGs sind Sie aus Glück heraus versuchen zu ziehen, um das Bild, da offenbar der GDI+ graphics-Objekt unterstützt keine indizierten Bilder an.

    Wenn Sie nicht brauchen, um mit indizierten PNGs könnte man die Fehler auffangen und konvertieren Sie Ihre Eingabe, um reguläre RGB-PNGs mit einem 3rd party-Dienstprogramm.

    edit:

    Fand ich diesen link http://fci-h.blogspot.com/2008/02/c-indexed-pixel-problem.html, das gibt eine Methode zum zeichnen auf dem Bild, aber es wirkt sich nicht auf das original, nur eine Kopie, die Sie Speichern können (), wenn Sie benötigen.

    Falls der link down geht:

    Bitmap bm = (Bitmap) System.Drawing.Image.FromFile("Fci-h.jpg",true);
    Bitmap tmp=new Bitmap (bm.Width ,bm.Height );
    Graphics grPhoto = Graphics.FromImage(tmp);
    grPhoto.DrawImage(bm, new Rectangle(0, 0, tmp.Width , tmp.Height ), 0, 0, tmp.Width , tmp.Height , GraphicsUnit.Pixel);
  2. 12

    Können Sie nicht erstellen Sie eine Grafik aus einem indizierten Bild-format (PNG, GIF,…).
    Sollten Sie eine Bitmap-Datei (Datei oder konvertieren Sie Ihr Bild in eine bitmap).

    Image img = Image.FromFile("file.png");
    img = new Bitmap(img);
    newGraphics = Graphics.FromImage(img);
    • In der Tat, Toten link gibt.
    • Vielleicht ich habe nicht die erforderlichen „using“ – Anweisung, aber Visual Studio nicht erkennen, dass die Funktion.
    • Welche Funktion haben Sie ?
    • Wie pro die docs, das funktioniert nicht mit einem Indizierten Bild msdn.microsoft.com/en-us/library/…
    • badbod99 > verpasst Du die img = new Bitmap(img);
    • Du hast 100% Recht!!! Es funktioniert perfekt, habe versucht, mit PNG und Indizierte bitmaps.
    • Es ist innerhalb des Systems.Drawing-namespace. msdn.microsoft.com/en-us/library/…

Kostenlose Online-Tests