无法从带有索引像素格式的图像创建graphics对象

¥20.00
使用.net图片水印时报错:无法从带有索引像素格式的图像创建graphics对象

最佳解决方案

原因分析

通常是这句引发的异常
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage("图片路径")

/// <summary>
/// 会产生graphics异常的PixelFormat
/// </summary>
private static PixelFormat[] indexedPixelFormats = { PixelFormat.Undefined, PixelFormat.DontCare,
PixelFormat.Format16bppArgb1555, PixelFormat.Format1bppIndexed, PixelFormat.Format4bppIndexed,
PixelFormat.Format8bppIndexed
    };

/// <summary>
/// 判断图片的PixelFormat 是否在 引发异常的 PixelFormat 之中
/// </summary>
/// <param name="imgPixelFormat">原图片的PixelFormat</param>
/// <returns></returns>
private static bool IsPixelFormatIndexed(PixelFormat imgPixelFormat)
{
    foreach (PixelFormat pf in indexedPixelFormats)
    {
        if (pf.Equals(imgPixelFormat)) return true;
    }

    return false;
}

 if (IsPixelFormatIndexed(sBitmap.PixelFormat))
            {
                Bitmap bmp = new Bitmap(sBitmap.Width, sBitmap.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(sBitmap, 0, 0);
                }
                sBitmap = bmp;
            }
            Graphics graphics = Graphics.FromImage(sBitmap);
可以采用将此图片先clone到一张BMP上的方法来解决

嗝屁猫 T2 被采纳率89%
2021-04-21 18:36
打赏 0 1
页面统计
1209 访问
0 帮助
0.00 打赏

hierror 2019 © hierror.com 京ICP备13026190号-1

通知消息
  • 暂无任何消息