2015-02-10 6 views
0

Ситуация в основном рисует несколько движущихся примитивных фигур с основным линейным градиентом, поэтому они перекрываются на прозрачном пустом холсте. Там, где они перекрывают изменения значения альфа-канала (т.е. они истекают кровью).Пытается манипулировать альфой на холсте без get/putImageData?

Заключительный этап округляет альфа для каждого отдельного пикселя, поэтому он равен 0 или 255, в зависимости от того, к чему он ближе.

С ImageData это легко сделать -

var ctxImage = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height); 
var ctxData = ctxImage.data; 
for (var i = 0; i < ctxData.length; i += 4) { 
    ctxData[i + 3] = ctxData[i + 3] > 128 ? 255 : 0; 
    // or ctxData[i + 3] = Math.round(ctxData[i + 3]/255) * 255; 
} 
ctx.putImageData(ctxImage, 0, 0); 

Как что getImageData очень дорого в процессорное время, я надеялся, чтобы выработать решение, которое используется globalCompositeOperation, но просто не может показаться каким-либо образом, чтобы получить это работать, любые идеи?

ответ

0

Нет альтернативного способа привязки альфы к 0 || 255.

Композиция позволяет сохранить исходный или целевой пиксель, но не будет привязывать альфу, как вы описываете.

+0

Вот что я подумал - но надеялся, что я смогу получить что-то близкое - просвет полупрозрачности не плохой: - / – Rycochet