如何解决我的水印位置问题?

时间:2019-01-18 15:43:41

标签: c# winforms

我正在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) 

Watermark image 1 在此图像中,我设置为水印文本的大小为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轴,反之亦然。

Watermark Image 2 在此图像中,我将水印文本的大小设置为72。水印的位置甚至小于8号。它不像我期望的那样停留在图像的左上角。

如您所见,文本框的大小也随着水印文本大小的增加而增加。如果能在增加文本大小的同时保持文本框大小不变的同时获得帮助,我将不胜感激。水印文本的字体和大小是使用Visual Studios内置的fontDialog设置的。

1 个答案:

答案 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将使水印的预期“左上”位置看起来像“左中”位置:

enter image description here