【问题标题】:How do I solve my watermark position issue?如何解决我的水印位置问题?
【发布时间】:2019-01-25 18:19:10
【问题描述】:

我正在使用 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 设置的。

【问题讨论】:

  • 不确定你在问什么。 rbVerl 应该是 Top 的意思吗?如果您不希望 TextBox 调整大小,请不要设置 TextBox 的字体。只需将字体信息存储在变量中即可。图像看起来并没有覆盖整个 PictureBox - 这使得它很难正确定位。
  • 看起来您需要确定如何处理图像的锚点(即它是否将图像定位在坐标中心而不是定位在图像的左上角),然后使用图像的分辨率。您还应该根据帧的大小调整图像的大小(例如,如果水印图像是一个大的 4K 图像并且帧只有 720p,你必须大大缩小它!),并处理任何填充(即不把图像放在框架的确切边缘)。
  • 执行文本绘制的代码在哪里?有了这个:Y = (int)10; 作为提示,IMO 很难提供任何有意义的建议。

标签: c# winforms


【解决方案1】:

我玩弄了数字,并使用以下代码设法将我的水印位置放在“左上角”:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多