給圖片添加水印時
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;
}