private void button6_Click(object sender, EventArgs e)
{
DrawWatermark(null, "TEST", new Font("宋体", 64, FontStyle.Bold), new SolidBrush(Color.Black), 10, 10, 0.2);
}
/// <summary>
/// 给一个位图绘制水印文字
/// </summary>
/// <param name="text">水印文本</param>
/// <param name="x">起始点</param>
/// <param name="y">起始点</param>
/// <param name="opacity">不透明度,0~1</param>
private Bitmap DrawWatermark(Image image, string text, Font font, Brush brush, int x, int y, double opacity)
{
Bitmap bm1 = new Bitmap("e://a.bmp");
Graphics g1 = Graphics.FromImage(bm1);
//测量水印文字的大小,然后申请一个新的位图
SizeF sizef = g1.MeasureString(text, font);
Bitmap bm2 = new Bitmap((int)sizef.Width, (int)sizef.Height);
Graphics g2 = Graphics.FromImage(bm2);
g2.DrawImage(bm1, 0, 0, new Rectangle(x, y, bm2.Width, bm2.Height), GraphicsUnit.Pixel);
g2.DrawString(text, font, brush, 0, 0);
BitmapData data1 = bm1.LockBits(new Rectangle(0, 0, bm1.Width, bm1.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
BitmapData data2 = bm2.LockBits(new Rectangle(0, 0, bm2.Width, bm2.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
byte* p1 = (byte*)(void*)data1.Scan0;
byte* p2 = (byte*)(void*)data2.Scan0;
for (int j = 0; j < bm2.Height; j++)
{
for (int i = 0; i < bm2.Width; i++)
{
//p1[(y + j) * data1.Stride + (x + i) * 3] = (byte)(p1[(y + j) * data1.Stride + (x + i) * 3] * (1 - opacity) + opacity * p2[j * data2.Stride + i * 3]);
//p1[(y + j) * data1.Stride + (x + i) * 3 + 1] = (byte)(p1[(y + j) * data1.Stride + (x + i) * 3 + 1] * (1 - opacity) + opacity * p2[j * data2.Stride + i * 3 + 1]);
//p1[(y + j) * data1.Stride + (x + i) * 3 + 2] = (byte)(p1[(y + j) * data1.Stride + (x + i) * 3 + 2] * (1 - opacity) + opacity * p2[j * data2.Stride + i * 3 + 2]);
p1[(y + j) * data1.Stride + (x + i) * 3] = (byte)(p1[(y + j) * data1.Stride + (x + i) * 3] * (1 - opacity) + opacity * p2[j * data2.Stride + i * 3]);
p1[(y + j) * data1.Stride + (x + i) * 3 + 1] = (byte)(p1[(y + j) * data1.Stride + (x + i) * 3] * (1 - opacity) + opacity * p2[j * data2.Stride + i * 3 + 1]);
p1[(y + j) * data1.Stride + (x + i) * 3 + 2] = (byte)(p1[(y + j) * data1.Stride + (x + i) * 3] * (1 - opacity) + opacity * p2[j * data2.Stride + i * 3 + 2]);
}
}
bm1.UnlockBits(data1);
bm2.UnlockBits(data2);
}
bm1.Save("e://1.bmp");
return bm1;
}