Bitmap添加水印提示【无法从带有索引像素格式的图像创建Graphics对象】

来源:互联网 发布:young网络下载 编辑:程序博客网 时间:2024/05/22 14:06

给图片添加水印时

Bitmap img = bm.ToBitmap();

Graphics g1 = Graphics.FromImage(img);

调用上面的语句,出现这个错误提示:



Bitmap img = bm.ToBitmap();               //如果原图片是索引像素格式之列的,则需要转换               if (IsPixelFormatIndexed(img.PixelFormat))               {                   Bitmap bmp = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);                   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(img, 0, 0);                    //加水印                   String str = "hello, string";                   Font font = new Font("宋体", 8);                   SolidBrush sbrush = new SolidBrush(Color.Black);                   g.DrawString(str, font, sbrush, new PointF(10, 10));                    pictureBox1.Image = bmp;               }               else               {                   //直接加水印               }



添加引用和函数

using System.Drawing.Imaging;         /// <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;        }