现在的位置: 首页 > 综合 > 正文

无法从带有索引像素格式的图像创建graphics对象|A Graphics object cannot be created from an image that has an indexed pixel format

2012年04月24日 ⁄ 综合 ⁄ 共 965字 ⁄ 字号 评论关闭

大家在用 .NET 做图片水印功能的时候, 如果原图片是GIF格式, 很可能会遇到 “无法从带有索引像素格式的图像创建graphics对象”这个错误,对应的英文错误提示是“A Graphics object cannot be created from an image that has an indexed pixel format"

这个exception是出现在 System.Drawing.Graphics g = System.Drawing.Graphics.FromImage("图片路径")  

这个调用的语句上,通过查询 MSDN, 我们可以看到如下的提示信息:

为了避免此问题的发生,可以采用将此GIF图片先clone到一张BMP上的方法来解决:

using (Image sourceImage = Image.FromFile("原图片路径"))
{
////判断原图片是否是GIF图片
if (sourceImage.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
{
    Bitmap bmp = new Bitmap(sourceImage.Width, sourceImage.Height, PixelFormat.Format32bppArgb);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        ////提高图片质量
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.DrawImage(sourceImage, 0, 0);
     }
    
     ////现在的 bmp就代替了原来的gif图片,下面的操做,就全部针对这个 bmp 进行就是了
}
}

经过上面的转换, 就可以避免因图片的索引信息而引发异常了。

原文:http://www.zu14.cn/2008/12/19/net_gif_index_error/

抱歉!评论已关闭.