Алгоритм растушевки углов с градиентной заливкой на изображении

StackOverflow https://stackoverflow.com/questions/106609

Вопрос

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

(Я реализовал шаблон радиальной заливки в углу, но переход все еще недостаточно плавный.)

Мои вопросы:

  1. Если существует стандартный алгоритм для этой задачи, как он называется и, что еще лучше, как он реализован?

  2. Отказываясь от любого стандартного алгоритма, какой наилучший способ определить желаемое значение пикселя для получения плавного градиента в углах?(Сделайте плавный переход от вертикального градиента к горизонтальному градиенту.)

Редактировать:Итак, представьте, что у меня есть изображение, которое я вставлю поверх увеличенного изображения.Изображение большего размера - сплошное черное, а изображение меньшего размера - сплошное белое.Прежде чем вставить его, я хочу смешать меньшее изображение с большим, установив значение alpha для меньшего изображения, чтобы создать прозрачную "рамку" вокруг него, чтобы оно "сливалось" с большим изображением.Если все сделано правильно, у меня должен получиться плавный градиент от черного к белому, и я делаю это везде, кроме углов и внутреннего края.

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

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

Это было полезно?

Решение

Предположительно, вы перемножаете два градиента там, где они перекрываются, верно?

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

Простая сигмоидальная функция - smoothstep(t) = tt(3 - 2*t), где 0 <= t <= 1

Другие советы

Если вам не нужно изменять его размер, то вы можете просто использовать простую альфа-карту.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top