Каков наилучший способ создания реалистичного маркера в .NET (с использованием GDI +)? - PullRequest
1 голос
/ 21 мая 2009

Как я могу создать реалистичный маркер (имитирующий реальное перо маркера) в .NET, используя GDI +? Он предназначен для использования на графическом объекте, а не на выбираемом тексте.

Использование прозрачной кисти (с альфа-каналом) не помогает, так как все, что находится ниже области, покрытой кистью, становится «нечетким», и я бы хотел, чтобы «передний план» (в основном текст) оставался чистым (оставьте его цвет).

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

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

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

Я мог бы жить как с решением, которое заполняет «выделенную» область, так и с кистью.

Ответы [ 3 ]

3 голосов
/ 21 мая 2009

Вот статья, в которой обсуждается, как выполнять различные операции смешивания в GDI +. Основываясь на моих экспериментах, режим Darken или Multiply blend сделает свое дело.

http://www.codeproject.com/KB/GDI-plus/KVImageProcess.aspx

1 голос
/ 09 декабря 2013

Желтый маркер позволяет желтому свету проходить при блокировании остальных.

В цветовой модели RGB это означает, что вы пропускаете красный и зеленый, а синий - блокируете.

Мы можем использовать образец изображения, чтобы увидеть эффекты подсветки (Microsoft Snipping Tool) на каналах:

Исходное изображение :

enter image description here

Выделенные

enter image description here

Цветовые каналы :

enter image description here

Итак, вам нужно установить значение blue равным нулю там, где вы хотите, чтобы ваш маркер появился.

К сожалению, нет режима смешивания, атрибутов изображения или цветовой матрицы, которые можно использовать только для рисования одного компонента цвета. Единственный способ добиться этого в GDI + - использовать LockBits.

0 голосов
/ 21 мая 2009

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

...