Frage

Arbeiten in Visual Studio 2008. Ich versuche, auf ein PNG -Bild zu zeichnen und dieses Bild erneut zu speichern.

Ich mache Folgendes:

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

Und im Konstruktor:

newGraphics = Graphics.FromImage(img);

Der Aufbau der Lösung gibt keine Fehler. Wenn ich versuche, es auszuführen, bekomme ich das:

Ein Grafikobjekt kann nicht aus einem Bild erstellt werden, das ein indiziertes Pixelformat hat.

Ich habe nicht viel Erfahrung damit, Bilder in C#zu verwenden. Was bedeutet das und wie kann ich das beheben?

Bearbeiten: Durch Debugging erzählt mir Visual Studio, dass das Bild a hat format8bppindexed Pixelformat.

Also, wenn ich die Grafikklasse nicht verwenden kann, was benutze ich dann?

Edit2: Nach dem Lesen Dies, Ich denke, es ist sicher anzunehmen, dass ich mich besser an JPG -Dateien halte, wenn ich mit GDI+arbeite, nein?

Edit3: Meine Verwendungsstatements:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
War es hilfreich?

Lösung

Ohne eine bessere PNG -Bibliothek, die indizierte PNGs unterstützt, haben Sie aus Glück, dieses Bild zu zeichnen, da das GDI+ -Graphikobjekt offensichtlich keine indizierten Bilder unterstützt.

Wenn Sie keine indizierten PNGs verwenden müssen, können Sie diesen Fehler fangen und Ihre Eingabe mit einem Dienstprogramm Drittanbieter in reguläre RGB -PNGs konvertieren.

bearbeiten:

Ich habe diesen Link gefunden http://fci-h.blogspot.com/2008/02/c-indexed-pixel-problem.html Dies gibt eine Methode zum Zeichnen auf Ihr Bild. Sie hat jedoch nicht das Original, nur eine Kopie, die Sie speichern können (), wenn Sie benötigen.

Falls der Link sinkt:

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);

Andere Tipps

Sie können keine Grafiken aus einem indizierten Bildformat (PNG, GIF, ...) erstellen. Sie sollten eine Bitmap verwenden (Datei oder umwandeln Sie Ihr Bild in eine Bitmap).

Image img = Image.FromFile("file.png");
img = new Bitmap(img);
newGraphics = Graphics.FromImage(img);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top