0
ウォーターマークを提供するためにイメージを別のイメージに覆い隠すのですが、ソースイメージ全体をカバーする必要があります。問題は、提供される透かしが600x600であり、ソースイメージが任意のサイズとアスペクト比を持つことができることです。これまではソース画像全体をカバーしていませんでした。C#Graphics.DrawImageを使用して透明でイメージを完全にカバーする方法
ウォーターマークを提供するためにイメージを別のイメージに覆い隠すのですが、ソースイメージ全体をカバーする必要があります。問題は、提供される透かしが600x600であり、ソースイメージが任意のサイズとアスペクト比を持つことができることです。これまではソース画像全体をカバーしていませんでした。C#Graphics.DrawImageを使用して透明でイメージを完全にカバーする方法
私はこれを非常に簡単な方法で解決しました。
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に設定しました)。
送信元と宛先の両方の矩形を指定できるDrawImageの[overload](https://msdn.microsoft.com/en-us/library/ktyfbs10(v=vs.110).aspx)があります。 – TaW
アスペクト比が大きく異なる場合は、タイル張りのアプローチを考えてみてください。 – TaW
@TaWコメントのリンクは結構ですか? :-) –