Четверг, 21 Ноября 2024, 22:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Прозрачность пикселя, или удалёние его[JavaScript][Canvas]
last2424Дата: Понедельник, 21 Ноября 2016, 15:21 | Сообщение # 1
30 мл. блоков
Сейчас нет на сайте
Драсте, давно не бывал на форуме.
Значит, появилась проблема с пикселями. Сначала рисую пустого белого персонажа, а потом через манипуляцию пикселей натягиваю ему какой-либо рандомный цвет.
И значит, не могу убрать ненужные пиксели.

*всё что снаружи жёлтого - ненужные части*
В спрайте эти части сами по себе прозрачные, но когда начинается манипуляция пикселями, то появляются эти ненужные куски.
Вот код самой смены цвета:
Код
function recolor(x, y, c1, c2, fillC) {
    var imgData = graph.getImageData(x, y, c1, c2);
    var col = hexToRgbA(fillC);
    for(var i = 0; i < imgData.data.length; i+=4){
//    console.log("r: "+ imgData.data[i] + ", g: " + imgData.data[i+1] + ", b: " + imgData.data[i+2] + ", a: " + imgData.data[i+3]);
    if(imgData.data[i] >= 50 && imgData.data[i] <= 255){
    imgData.data[i] = col.r-(255-imgData.data[i]);
    imgData.data[i+1] = col.g-(255-imgData.data[i+1]);
    imgData.data[i+2] = col.b-(255-imgData.data[i+2]);
    imgData.data[i+3] = imgData.data[i+3];
    }
    }

    graph.putImageData(imgData, x, y);
}


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

Сообщение отредактировал last2424 - Вторник, 22 Ноября 2016, 19:43
KempstonДата: Вторник, 22 Ноября 2016, 11:25 | Сообщение # 2
почетный гость
Сейчас нет на сайте
У меня не открывается картинка, но возможно это поможет: ссылка
last2424Дата: Вторник, 22 Ноября 2016, 19:43 | Сообщение # 3
30 мл. блоков
Сейчас нет на сайте
Kempston, исправил скриншот, не понял, что имеется ввиду в приложенной ссылке.

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
KempstonДата: Вторник, 22 Ноября 2016, 20:33 | Сообщение # 4
почетный гость
Сейчас нет на сайте
last2424, там речь о том, чтобы вместо putImageData попробовать отрисовать каждый пиксель при помощи fillRect, то есть, просто создать цикл отрисовки прямоугольников нужного цвета размером 1 пиксель поверх старого пикселя.

Можно применить еще другой способ. Битовый массив сохранить в new Image через временный canvas и его уже отрисовать на canvas при помощи drawImage.

Тут дело в том, что putImageData игнорирует альфа-канал и перед отрисовкой очищает для себя полный прямоугольник. И, если там окажутся прозрачные пиксели, то сквозь них будет проступать фон, какой он там у вас. В данном случае, черный. Возможно это цвет body документа или что там у вас под canvas.


Сообщение отредактировал Kempston - Вторник, 22 Ноября 2016, 20:44
last2424Дата: Среда, 23 Ноября 2016, 16:05 | Сообщение # 5
30 мл. блоков
Сейчас нет на сайте
Kempston, спасибо, я попробую. :D

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг