2017-07-17 9 views
0

ウォーターマークを提供するためにイメージを別のイメージに覆い隠すのですが、ソースイメージ全体をカバーする必要があります。問題は、提供される透かしが600x600であり、ソースイメージが任意のサイズとアスペクト比を持つことができることです。これまではソース画像全体をカバーしていませんでした。C#Graphics.DrawImageを使用して透明でイメージを完全にカバーする方法

+0

送信元と宛先の両方の矩形を指定できるDrawImageの[overload](https://msdn.microsoft.com/en-us/library/ktyfbs10(v=vs.110).aspx)があります。 – TaW

+0

アスペクト比が大きく異なる場合は、タイル張りのアプローチを考えてみてください。 – 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; 
    } 

In PictureBox1私はメイン画像をロードしました。 pictureBox2で私は "ウォーターマーク"をロードしました。イベントハンドラでは、結果のイメージ(最初のメインイメージと2番目のイメージ)を作成し、それをpictureBox3にロードしました。ウォーターマークの影響を受けるために、私は色のアルファ成分を減らしました(私は50に設定しました)。

関連する問題