В настоящее время я работаю над исправлением heatmap.js, и мне было интересно, знает ли кто-нибудь, удалось ли получить следующий эффект при использовании контекста рендеринга <canvas>
2d.
- У меня есть радиальный градиент от черного (альфа 0,5) до прозрачного радиуса 40 пикселей. центр радиального градиента равен x = 50, y = 50
- У меня есть другой радиальный градиент от черного (альфа 0,5) до прозрачного радиуса 40 пикселей. центр радиального градиента находится при x = 80, y = 50
Два градиента перекрываются. Моя проблема заключается в следующем: перекрывающаяся область объединяется, что приводит к более высокому значению альфа, чем центры радиальных градиентов, и, таким образом, показывает неправильные данные (например, более горячие области в тепловой карте из-за этих добавок между градиентами)
Посмотрите на gist, выполнив его в консоли, вы можете увидеть эту проблему.
Ожидаемое поведение: Самые темные области - это центры градиентов, перекрывающаяся область двух градиентов сливается, но не складывается.
Увидев, что ни одно из globalCompositeOperations не привело к ожидаемому поведению, я попробовал комбинации этих операций. Как я мог подумать, возможно, было возможно следующее:
- рисовать первый градиент
- использовать составной пункт назначения-назначения
- рисовать второй градиент → налагает перекрывающуюся область с первого градиента
- использовать sourceOperation с исходным кодом
- снова нарисуйте второй градиент
Но, к сожалению, я не нашел комбинацию, которая сработала. Я бы хотел услышать ваши отзывы, спасибо заранее!
PS: Я знаю, что это можно сделать, манипулируя пикселями вручную, но мне было интересно, есть ли более легкое, более элегантное и быстрое решение для этого.