Как нарисовать пунктирные линии, которые видны на любом фоне в C#

В этом примере показано, как рисовать пунктирные линии, которые видны на любом фоне. Иногда трудно рисовать линии, которые видны поверх фотографии или другого сложного фона. Например, когда пользователь нажимает и перетаскивает, чтобы выбрать область на фотографии, вам нужно, чтобы пользователь мог видеть выбранную область. Если фоновое изображение сложное, тогда вы не сможете найти цвет для рисования линий, чтобы они были легко видны.

Некоторые старые системы рисования могли рисовать в режиме XOR (эксклюзивный или), поэтому цвет пикселя был обратным по цвету за ним, делая его видимым. Это не работает в .NET, по крайней мере, не так просто.

Другой подход - рисовать пунктирные линии, состоящие из двух цветов. Плохая новость заключается в том, что пунктирные линии могут иметь только один цвет в .NET. Хорошей новостью является то, что ее легко подделать.

Чтобы нарисовать двухцветные пунктирные линии, сначала нарисуйте линии, используя сплошную ручку. Затем снова нарисуйте их, используя пунктирную ручку другого цвета. В этом примере используется следующий код для рисования двухцветных пунктирных линий.

// Заполните четыре прямоугольника и нарисуйте двухцветный пунктирный прямоугольник.
private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics gr = e.Graphics;

    // Заполните прямоугольники.
    int wid = ClientSize.Width / 2;
    int hgr = ClientSize.Height / 2;
    gr.FillRectangle(Brushes.Green, 0, 0, wid, hgr);
    gr.FillRectangle(Brushes.Orange, 0, hgr, wid, hgr);
    gr.FillRectangle(Brushes.Yellow, wid, 0, wid, hgr);
    gr.FillRectangle(Brushes.Blue, wid, hgr, wid, hgr);

    // Рисуем пунктирный прямоугольник.
    Rectangle rect = new Rectangle(
        20, 20,
        ClientSize.Width - 40, ClientSize.Height - 40);
    using (Pen pen1 = new Pen(Color.Black, 2))
    {
        gr.DrawRectangle(pen1, rect);
    }
    using (Pen pen2 = new Pen(Color.White, 2))
    {
        pen2.DashPattern = new float[] { 5, 5 };
        gr.DrawRectangle(pen2, rect);
    }
}

Сначала код преобразует переменную gr в объект Graphics Graphics обработчика события, чтобы сделать следующий код немного легче читать.

Затем код заполняет форму четырьмя прямоугольниками. Затем он рисует черный прямоугольник с толщиной строки 2 и затем рисует прямоугольник штриховым белым пером. Результатом является пунктирная черно-белая коробка, которую легко увидеть по всем цветным прямоугольникам.

В этом примере черный ящик работал бы достаточно хорошо (хотя было бы трудно увидеть по зеленым и синим прямоугольникам), а белая коробка также работала бы неплохо (хотя было бы трудно увидеть по желтому прямоугольнику) , Ни черный, ни белый не сработали бы, если бы один из прямоугольников был черным, а другой - белым.

Этот метод может привести к некоторым раздражающим результатам в зависимости от используемых цветов. Например, синие и красные штрихи на синих и красных прямоугольниках могут дать вам головную боль. Метод обычно хорошо работает, если цвета штриховки в коробке не слишком сильно взаимодействуют друг с другом (например, синий и красный), и они контрастируют с фоном. Для многих фотографий черно-белые работают очень хорошо.

В этом примере прямоугольник немного легче увидеть, используя линии с толщиной 2.

Источник: csharphelper.com/blog/2017/07/draw-dashed-lines-that-are-visible-on-any-background-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector