Проблема с изображениями PNG в C#
Вопрос
Работаю в 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);