Pregunta

Trabajo en Visual Studio 2008. Estoy tratando de dibujar en una imagen PNG y guardar esa imagen nuevamente.

Hago lo siguiente:

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

Y en el constructor:

newGraphics = Graphics.FromImage(img);

Construir la solución no da errores. Cuando intento ejecutarlo, obtengo esto:

  

No se puede crear un objeto de gráficos   de una imagen que tiene un índice   formato de píxeles.

No tengo mucha experiencia con el uso de imágenes en C #. ¿Qué significa esto y cómo puedo remediarlo?

EDITAR: a través de la depuración, Visual Studio me dice que la imagen tiene un format8bppindexed Formato de píxel.

Entonces, si no puedo usar la clase Graphics, ¿qué uso?

EDIT2: Después de leer esto , creo que es seguro asumir que mejor me quedo con los archivos JPG cuando trabajo con GDI +, ¿no?

EDIT3: mis declaraciones de uso:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
¿Fue útil?

Solución

Sin una mejor biblioteca PNG que admita PNG indexados, no tiene suerte tratando de dibujar esa imagen, ya que evidentemente el objeto gráfico GDI + no admite imágenes indexadas.

Si no necesita usar PNG indexados, puede atrapar ese error y convertir su entrada a PNG RGB normales utilizando una utilidad de terceros.

editar:

Encontré este enlace http: // fci-h.blogspot.com/2008/02/c-indexed-pixel-problem.html que proporciona un método para dibujar en su imagen, sin embargo, no afectará al original, solo una copia que puede guardar () si lo requiere.

En caso de que el enlace se caiga:

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

Otros consejos

No puede crear gráficos a partir de un formato de imagen indexada (PNG, GIF, ...). Debe usar un mapa de bits (archivo o convertir su imagen en un mapa de bits).

Image img = Image.FromFile("file.png");
img = new Bitmap(img);
newGraphics = Graphics.FromImage(img);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top