Вопрос

Работаю в Visual Studio 2008.Я пытаюсь нарисовать изображение в формате PNG и снова сохранить это изображение.

Я делаю следующее:

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

И в конструкторе:

newGraphics = Graphics.FromImage(img);

Построение решения не приводит к ошибкам.Когда я пытаюсь запустить его, я получаю следующее:

Графический объект не может быть создан из изображения с индексированным пиксельным форматом.

У меня не так уж много опыта использования изображений в C #.Что это значит и как я могу это исправить?

Редактировать:во время отладки Visual Studio сообщает мне, что изображение имеет format8bppindexed Пиксельный формат.

Итак, если я не могу использовать класс Graphics, что мне использовать?

РЕДАКТИРОВАТЬ 2:После прочтения это, Я думаю, можно с уверенностью предположить, что мне лучше придерживаться файлов JPG при работе с GDI +, не так ли?

РЕДАКТИРОВАТЬ 3:мои инструкции по использованию:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
Это было полезно?

Решение

Без лучшей библиотеки PNG, которая поддерживает индексированные PNG, вам не повезло, пытаясь нарисовать это изображение, поскольку, очевидно, графический объект GDI + не поддерживает индексированные изображения.

Если вам не нужно использовать индексированные PNG-файлы, вы можете перехватить эту ошибку и преобразовать свой ввод в обычные PNG-файлы RGB с помощью сторонней утилиты.

Редактировать:

Я действительно нашел эту ссылку http://fci-h.blogspot.com/2008/02/c-indexed-pixel-problem.html это дает метод рисования на вашем изображении, однако это не повлияет на оригинал, просто копию, которую вы можете сохранить (), если вам потребуется.

На случай, если ссылка пропадет:

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

Другие советы

Невозможно создать графику из индексированного изображения (PNG, GIF, ...). Вам следует использовать растровое изображение (файл или преобразовать изображение в растровое изображение).

Image img = Image.FromFile("file.png");
img = new Bitmap(img);
newGraphics = Graphics.FromImage(img);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top