Reputation: 455
Hello i need create blending color tool, i try take color pixel from canvas with getImageData
and mixed with my selected color and get average color, i can get it with easy:
/* r1 = red channel from getImageData
g1 = green channel from getImageData
b1 = blue channel from getImageData
r2 = red channel my selected color
g2,b2 same
*/
var avR = Math.round(0.5*r1 + 0.5*r2);
var avG = Math.round(0.5*g1 + 0.5*g2);
var avB = Math.round(0.5*b1 + 0.5*b2);
While i drawing i try mixed this colors, but blending effect not available..
Maybe somebody can help me? http://jsfiddle.net/b72ky2sc/6/
i need that tool can get image in left side:
Upvotes: 2
Views: 3149
Reputation: 1
I have been able to use hsl and RGB to generate blending rects which can be shrunk or sprited from 768by1536 raw pixel at 50fps this could be sprited as in image or shrunk&moved&alphacomposited to hit targets with draw image or changing the grid. Also this is an example of how the example of low alpha channel blending with rects in HTML5 combined with additive blending may help get a simular to the one you want because each rect can use different alpha blending.
Q% = xw = x/x
ANS = Q% * (v + Geo)
Three parts:
How it displays on my chromebook:
<!DOCTYPE html>
<html>
<body>
<CANVAS WIDTH="1920" HEIGHT="1536" ID="canvas" tabindex="0">
</CANVAS><script>
var canvas = document.getElementById('canvas');
var canvasWidth = canvas.width;
var canvasHeight = canvas.height;
var ctx = canvas.getContext('2d');
var gg=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
var m = 3,A = 945,E = 0.004,C = 0.005,sJ=3,sK=945,sL=0.005,sM=0.004
ctx.globalAlpha =.375
var dataArray = []
var dataArrayB = []
var L=488,m=0,K=196;
for (i = 0; i < 2688; i += 6) {
//mosty 456
a = '#';
a += gg[4]
a += gg[i ^ (i & 4080) ^ i >> 8]
a += gg[6]
b = '#';
b += gg[4]
b += gg[5]
b += gg[i ^ (i & 4080) ^ i >> 8]
var C = E / C * E;
var SparcityDDD = (A & 255) + 256
A += m;
var SparcityD = ((A) & 511) + 948
C = E;
var WeberD = 0.005*Math.random()
E = C / E * C
var WeberDDD = 0.005*Math.random()
//xw=normal is dot perpendicular*rotational coeffiecient usually small soft body motion=vgeo*xw%+(xvw)
Vorticity=24*(i&63)
VorticityZ=i>>1
VorticityX = (SparcityDDD--);
VorticityX *= (2 * (i % 48));
VorticityX++;
VorticityX *= 6 / WeberDDD;
VorticityY = (SparcityD--);
VorticityY *= (8 * Math.floor(i / 144));
VorticityY++;
VorticityY *= 6 / WeberD;
que=((Vorticity) & 511)*1.406
mue=(Vorticity/2-150)
if(que+10>K&&que+10<L){ctx.fillRect((0 * VorticityX + 1.16*VorticityZ)+60 & 2047, (0 * VorticityY + (Vorticity) & 511)*1.406+10,120,15);}
ctx.fillStyle = a
if(que-13>K&&que-13<L){ctx.fillRect((0 * VorticityX + 1.16*VorticityZ)+60 & 2047, (0 * VorticityY + (Vorticity) & 511)*1.406-13,120,20);}
//(50% fade) 80% 2.5,3,2.5,2,3,3,2,2
if(mue>K&&mue<L){
ctx.fillStyle = ctx.fillStyle = 'hsl(' + i*0.87 + ', 50%, 68%)';//hit majority
ctx.fillRect(VorticityZ*1.1+84,Vorticity/2-150, 8, 150);
ctx.fillStyle = ctx.fillStyle = 'hsl(' + i*0.87 + ', 50%, 68%)';//hit majority
ctx.fillRect(VorticityZ*1.1+104,Vorticity/2-150, 6, 150);
}
ctx.fillStyle = b
if(que-7>K&&que-7<L){ctx.fillRect((0 * VorticityX + 1.16*VorticityZ) & 2047, (0 * VorticityY + (Vorticity) & 511)*1.406-7,120,24);}
if((que+10>K&&que+10<L)||(que-13>K&&que-13<L)||(mue>K&&mue<L)||(que-7>K&&que-7<L)){
if (i>1344){
dataArray.push(i,(mue>K&&mue<(m*i+L))*1,(mue>K&&mue<(m*i+L))*1,(que+10>K&&que+10<(m*i+L))*1,(que-13>K&&que-13<(m*i+L))*1,(que-7>K&&que-7<(m*i+L))*1)
}else{
dataArrayB.push(i,(mue>K&&mue<(m*i+L))*1,(mue>K&&mue<(m*i+L))*1,(que+10>K&&que+10<(m*i+L))*1,(que-13>K&&que-13<(m*i+L))*1,(que-7>K&&que-7<(m*i+L))*1)
}
}
}
alert(dataArrayB);
alert(dataArray);
</script>
</body>
</html>
Upvotes: 0
Reputation:
You don't state enough details, but here is how you can use blending modes with canvas. Note that IE do not support any of these yet (except from normal
) so test this in recent Firefox or Chrome.
All blending modes in the current revised canvas standard is listed in the drop-down you can use to select mode. This way you can see which mode suits your need most (try things like hard-light
with a low alpha value as a start...).
(yeah, I got bored.. :) )
var cont = document.getElementById("spots"), // UI elements
canvas = document.getElementById("canvas"),
alpha = document.getElementById("alpha"),
modes = document.getElementById("modes"),
ctx = canvas.getContext("2d"),
isDown = false, // defaults
color = "rgb(107, 122, 174)";
// set up color palette using a custom "Spot" object
// This will use a callback function when it is clicked, to
// change current color
function Spot(color, cont, callback) {
var div = document.createElement("div");
div.style.cssText = "width:50px;height:50px;border:1px solid #000;margin:0 1px 1px 0;background:" + color;
div.onclick = function() {callback(color)};
cont.appendChild(div);
}
// add some spot colors to our palette container
new Spot(color, cont, setColor);
new Spot("rgb(107, 174, 170)", cont, setColor);
new Spot("#00f", cont, setColor);
new Spot("#ff0", cont, setColor);
new Spot("#0ff", cont, setColor);
new Spot("#f0f", cont, setColor);
// this will set current fill style based on spot clicked
function setColor(c) {ctx.fillStyle = c}
// setup defaults
ctx.fillStyle = color;
ctx.globalAlpha = 0.5;
// events
canvas.onmousedown = function() {isDown = true};
window.onmouseup = function() {isDown = false};
window.onmousemove = function(e) {
if (!isDown) return;
var r = canvas.getBoundingClientRect(),
x = e.clientX - r.left,
y = e.clientY - r.top;
ctx.beginPath();
ctx.arc(x, y, 25, 0, 2*Math.PI);
ctx.fill();
};
alpha.onchange = function(){ctx.globalAlpha = alpha.value * 0.01};
modes.onchange = function(){ctx.globalCompositeOperation = modes.value};
body{font:14px sans-serif;background:#333;color:#eee}
#spots {float:right}
#canvas {background:#fff;cursor:crosshair;border:1px solid #777}
<label for="modes">Blending Modes:</label>
<select id="modes">
<option value="normal">normal</option>
<option value="multiply">multiply</option>
<option value="screen">screen</option>
<option value="overlay">overlay</option>
<option value="darken">darken</option>
<option value="lighten">lighten</option>
<option value="color-dodge">color-dodge</option>
<option value="color-burn">color-burn</option>
<option value="hard-light">hard-light</option>
<option value="soft-light">soft-light</option>
<option value="difference">difference</option>
<option value="exclusion">exclusion</option>
<option value="hue">hue</option>
<option value="saturation">saturation</option>
<option value="color">color</option>
<option value="luminosity">luminosity</option>
</select>
<label for="alpha">Alpha:</label><input id="alpha" type="range" min=0 max=100 value="50">
<br>
<canvas id="canvas" width=500 height=500></canvas><div id="spots"></div>
Upvotes: 9