我正在使用VisualStudio2017中的C# Windows窗体进行图像水印应用程序。我的大部分代码都是从https://www.c-sharpcorner.com/article/build-a-simple-watermarking-utility-in-C-Sharp/中引用的,这对我帮助很大。但是,我发现为水印位置提供的代码过于有限,因此我添加了一组新的代码,以便为水印提供更多的位置选择。(左上角、右上角、左下角、右下角等)
然而,有一些问题,我使用的代码,我的‘顶部’水印位置。根据这个链接(Watermarking image position[asp.net])和这个链接(https://www.codeproject.com/Articles/31538/%2FArticles%2F31538%2FWatermarker-Embedding-image-and-text-watermarks),我发现“左上角”位置的代码是X和Y值的单个整数值。
问题是,我的水印位置实际上并不在图像的“顶部”(即使我使用了来自上述链接的代码)。同时,我也意识到我设置的水印文本的文本大小越大,水印的位置就越低。我怎样才能解决这个问题?我不希望用户选择一个“左上角”选项,并看到所产生的水印位置,该位置几乎位于图像的中心,因为文本大小很大。
我为“左上角”使用的代码:
if (rbHorl.Checked == true && rbVerl.Checked == true)
{
X = (int)10;
Y = (int)10;
}
// X (represents Left) and Y represents (Top)

在这张图片中,我设置的水印文本的大小是8。这个位置实际上并不在顶部。我希望在图像的最上面的角落看到它。水印位置与我的“底部”位置一样好。
我为“左下角”使用的代码:
else if (rbHorl.Checked == true && rbVerr.Checked == true)
{
X = (int)10;
Y = (int)(pictureBox.Image.Height - sz.Height) - 10;
}
//rbHorl represents Left and rbVerr represents Top我在X值和Y值之间切换,所以X是y轴,反之亦然。

在这张图片中,我将水印文本的大小设置为72。水印的位置甚至低于8大小,它不像我预期的那样停留在图像的左上角。
如您所见,文本框也随着水印文本大小的增加而增大。如果我也能得到帮助,在增加文本大小的同时,如何保持文本框的大小不变,我将不胜感激。水印文本的字体和大小是使用fontDialog设置的,该已经在Visual中构建。
发布于 2019-01-25 10:19:10
我玩弄数字,并设法使用以下代码将水印位置放在“左上角”:
if (rbHorl.Checked == true && rbVerl.Checked == true)//VTop Left
{
X = (int)10;
Y = (int)-30;
}我也意识到我把自己和我的按钮的标签混淆了,因此错误的代码用于左上角,中间和右边的位置。
至于在增加水印文本大小时不放大文本框中的文本,我从现有代码中删除了以下代码行(注释掉):
private void btnSetfont_Click(object sender, EventArgs e)
{
//defailt the current font and color to that
//used in the watermark textbox
fontDialog1.ShowColor = true;
//fontDialog1.Font = tbWatermarktext.Font;
fontDialog1.Color = tbWatermarktext.ForeColor;
if(fontDialog1.ShowDialog() != DialogResult.Cancel)
{
myFont = fontDialog1.Font;
myWatermarkColor = fontDialog1.Color;
//tbWatermarktext.Font = fontDialog1.Font;
tbWatermarktext.ForeColor = fontDialog1.Color;
}
}尽管已经解决了上述两个问题,但如果水印文本的大小设置得太大,那么水印的位置就会降低。在此图像中,水印文本大小为72,将使水印的“左上角”位置看起来类似于中间的左侧位置:

https://stackoverflow.com/questions/54257217
复制相似问题