2017-07-17 1056 views
0

我正在试图用另一个图像覆盖图像以提供水印,但它必须覆盖整个源图像。问题是提供的水印是600x600,并且源图像可以具有任何大小和高宽比。到目前为止,它并未完全覆盖源图像。如何使用C#透明地完全覆盖图像Graphics.DrawImage

+0

有一个[重载](https://msdn.microsoft.com/en-us/library/ktyfbs10(v = vs.110).aspx)的DrawImage,让你指定源和目标直肠段。 – TaW

+0

如果宽高比差别很大,你可以考虑一个平铺方法,btw .. – TaW

+0

@TaW所以,评论中的链接是好的? :-) –

回答

1

我像这样解决了它(以一种非常直接的方式)。

private void button1_Click(object sender, EventArgs e) 
    { 
     var image = new Bitmap(this.pictureBox1.Image.Width, this.pictureBox1.Image.Height); 
     var rect = new Rectangle(0, 0, this.pictureBox1.Image.Width, this.pictureBox1.Image.Height); 

     Graphics graphics = Graphics.FromImage(image); 
     graphics.DrawImage(this.pictureBox1.Image, 0, 0); 

     var waterMarkImage = new Bitmap(this.pictureBox2.Image.Width, this.pictureBox2.Image.Height); 
     for (int y = 0; y < waterMarkImage.Height; y++) 
     { 
      for (int x = 0; x < waterMarkImage.Width; x++) 
      { 
       var color = (this.pictureBox2.Image as Bitmap).GetPixel(x, y); 
       color = Color.FromArgb(50, color.R, color.G, color.B); 
       waterMarkImage.SetPixel(x, y, color); 
      } 
     } 

     graphics.DrawImage(waterMarkImage, rect); 

     this.pictureBox3.Image = image; 
    } 

在pictureBox1我加载了主图像。在pictureBox2中我加载了“水印”。在事件处理程序中,我创建了结果图像(第一个主图像,然后是第二个图像)并将其加载到pictureBox3中。为了获得水印效果,我减少了颜色的alpha分量(我将它设置为50)。