Модулируйте цвета с помощью drawImage на холсте HTML5 - PullRequest
1 голос
/ 16 октября 2011

Я играю с идеей изменить мою среду разработки игр для создания HTML5-версий игр, созданных с ее помощью. Одной из особенностей среды IDE является возможность определять кадры, которые не только определяют, как графическая ячейка преобразуется (поворачивается, растягивается и т. Д.), Но также и как она окрашивается при рисовании. Поэтому, если бы я хотел зеленые холмы и коричневые холмы, а также подъемы и спуски, мне потребовался бы только один рисунок, определенный для всех тех, просто преобразованный и окрашенный по-разному.

Я могу видеть, как контекст холста HTML5 позволит мне преобразовывать результаты drawImage, но я не вижу практического способа модуляции цветов. Я хочу иметь возможность, например, сказать, что R = 255, G = 255, B = 0, A = 127 и чтобы ни один из синих каналов не проходил (желто-окрашенная версия графика), прорисованная с 50% -ной прозрачностью (помните, что части графической ячейки уже могут быть полупрозрачными или прозрачными).

Возможно ли это? Или мне нужно будет getImageData и манипулировать пикселями и кешировать копируемые копии? Если мне нужно кэшировать управляемые копии, какова лучшая структура данных JavaScript для этого? Я думаю, что мне нужен какой-нибудь словарь, в котором ключом является индекс изображения, а RGBA каким-то образом составлен как одно значение. Поиск должен быть очень быстрым, потому что это может быть сделано для большинства разрисованных плиток.

1 Ответ

3 голосов
/ 16 октября 2011

К сожалению, я не думаю, что вы можете сделать это без помощи getImageData.

Вот пример тонирования изображения с использованием getImageData:

http://jsfiddle.net/3eUBk/2/

Это было то, что я сделал, чтобы ответить на этот вопрос, в котором есть объяснение всего, что происходит: Как я могу использовать карту градиента для тонирования холста HTML5 с изображением на холсте.

Дайте мне знать, если вам нужна дополнительная информация.

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