Прозрачность пикселя, или удалёние его[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, спасибо, я попробую.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
|
|
| |