我正在Visual Studio 2017中使用C#Windows Form来做图像水印应用程序。我的大部分代码都从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号。它不像我期望的那样停留在图像的左上角。
如您所见,文本框的大小也随着水印文本大小的增加而增加。如果能在增加文本大小的同时保持文本框大小不变的同时获得帮助,我将不胜感激。水印文本的字体和大小是使用Visual Studios内置的fontDialog设置的。
答案 0 :(得分:0)
我玩弄数字,设法用以下代码将水印位置放在“左上角”:
if (rbHorl.Checked == true && rbVerl.Checked == true)//VTop Left
{
X = (int)10;
Y = (int)-30;
}
我还意识到我对按钮的标签感到困惑,因此对左上,中和右的位置使用了错误的代码。
关于随着我增加水印文本大小而不会放大texbox中的文本,我从现有代码中删除了以下代码行(注释掉了):
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将使水印的预期“左上”位置看起来像“左中”位置: