Проблема с PNG-изображениями в C#
работа в Visual Studio 2008. Я пытаюсь нарисовать PNG-изображение и сохранить его снова.
Я делаю следующее:
private Image img = Image.FromFile("file.png");
private Graphics newGraphics;
и в конструкторе:
newGraphics = Graphics.FromImage(img);
построение решения не дает ошибок. Когда я пытаюсь запустить его, я получаю следующее:
невозможно создать графический объект из изображения с индексированным формат точек.
у меня нет большого опыта использования изображений в C#. Что? означает ли это и как я могу это исправить?
EDIT: через отладку Visual Studio сообщает мне, что изображение имеет format8bppindexed
Формат Пикселей.
Итак, если я не могу использовать класс Graphics, что мне использовать?
EDIT2: после чтения этой, я думаю, можно с уверенностью предположить, что мне лучше придерживаться JPG-файлов при работе с GDI+, нет?
EDIT3: мои операторы using -:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
2 ответов
без лучшей библиотеки PNG, которая поддерживает индексированные png, вам не повезло, пытаясь привлечь к этому изображению, поскольку, очевидно, объект GDI + graphics не поддерживает индексированные изображения.
Если вам не нужно использовать индексированные PNGs, вы можете поймать эту ошибку и преобразовать свой ввод в обычные RGB PNGs с помощью сторонней утилиты.
изменить:
Я нашел эту ссылку 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);