2017-07-17 1054 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)。