Проблемы альфа-композитинга - PullRequest
1 голос
/ 14 ноября 2010

Скажем, я хочу создать собственный элемент управления, который бы выглядел примерно так:

http://karmalita.com/stuff/alpha1.png

Ширина всплывающего окна может меняться, а также может изменяться относительное положение «треугольника указателя». Конечно, дополнительная графика / текст будет нарисован сверху.

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

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

http://karmalita.com/stuff/alpha2.png

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

Есть ли какая-нибудь магия Портера-Даффа, которую я могу сделать?

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

http://karmalita.com/stuff/alpha3.png

.... затем удалите прямоугольник клипа, затем нарисуйте треугольник указателя в области, где был прямоугольник клипа?

Или что? Есть ли более простой / лучший / более эффективный способ?

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

1 Ответ

0 голосов
/ 15 ноября 2010

Интересный ...

Я собирался сказать "Нет, нет другого выхода, кроме решения с обратным клип-прямоугольником" , но у меня есть (непроверенная) идея:

Когда вы добавляете секцию со стрелкой к обычному воздушному шару с 9 патчами, в результате (к счастью) все пиксели становятся более непрозрачными.

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

Я позволю вам подумать о математике для этого, но я думаю, это довольно просто.

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