在Visual Studio 2008年工作,我想画一个PNG图像上,并再次保存该图像。
我做到以下几点:
private Image img = Image.FromFile("file.png");
private Graphics newGraphics;
并在构造函数:
newGraphics = Graphics.FromImage(img);
构建解决方案没有给出错误。 当我尝试运行它,我得到这个:
图形对象不能从具有索引像素格式的图像创建的。
我没有在C#中使用的图像太多经验。 这是什么意思,我该如何解决这个问题?
编辑:经过调试,Visual Studio中告诉我,图像具有format8bppindexed
像素格式。
所以,如果我不能使用Graphics类的,我该用什么?
EDIT2:看完这个 ,我认为它是安全的假设,我更好地坚持JPG文件与GDI工作时+,不是吗?
EDIT3:我使用语句:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
如果不支持索引的PNG更好的PNG库你的运气设法吸引到图像,因为明显的GDI +图形对象不支持索引图像。
如果您不需要使用索引的PNG文件你可以陷阱,错误和你的输入转换为使用第三方工具定期RGB PNG格式。
编辑:
我发现这个链接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);