Как мне решить проблему с позицией водяного знака? - PullRequest
0 голосов
/ 18 января 2019

Я делаю приложение с водяными знаками для изображений, используя C # Windows Form в Visual Studio 2017. На большинство моих кодов ссылаются с https://www.c -sharpcorner.com / article / build-a-simple-watermarking-utility-in-C-Sharp / , что мне очень помогло.Однако я считаю, что коды для положения водяного знака слишком ограничены, поэтому я добавил новый набор кодов, чтобы обеспечить больший выбор позиции для водяного знака.(Вверху слева, вверху справа, внизу слева, внизу справа и т. Д.)

Однако есть некоторые проблемы с кодами, которые я использую для своей «верхней» позиции водяного знака.По этой ссылке ( Положение изображения с водяным знаком [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. Он не остается наверхний левый угол изображения, как я и ожидал.

Как видите, текстовое поле также увеличивается в размере по мере увеличения размера текста водяного знака.Я был бы признателен, если бы я мог также получить справку о том, как сохранить фиксированный размер текстового поля при увеличении размера текста.Шрифт и размер текста водяного знака устанавливаются с помощью fontDialog, который уже встроен в Visual Studios.

1 Ответ

0 голосов
/ 25 января 2019

Я поиграл с цифрами и сумел поставить свою позицию водяного знака в верхнем левом углу с помощью следующих кодов:

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, сделает положение водяного знака «вверху слева» похожим на центральное левое положение:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...