【发布时间】:2010-10-26 01:30:43
【问题描述】:
我已经使用这个代码来精确地尝试拥有颜色的 RGB 代码:
var huePixel = HueCanvas.css('background-color').match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);//["rgb(0, 70, 255", "0", "70", "255"]
var svPixel = SVCanvas.get(0).getContext("2d").getImageData(satPos,valPos,1,1).data;
//opacity*original + (1-opacity)*background = resulting pixel
var opacity =(svPixel[3]/255);
var r =parseInt((opacity*svPixel[0])+((1-opacity)*huePixel[1]));
var g =parseInt((opacity*svPixel[1])+((1-opacity)*huePixel[2]));
var b =parseInt((opacity*svPixel[2])+((1-opacity)*huePixel[3]));
问题在于,在某些像素中,RGB 并不完全相同。如果我使用 Math.round 而不是 parseInt 会有更多的问题,而且更多的像素与真实像素相比变化不大。
我知道问题出在var opacity =(svPixel[3]/255);,但我不知道如何把方程式放在没有问题的地方。
感谢您的关注。
【问题讨论】:
-
设置不透明度前svPixel的值是多少?
-
svPixel[3] 从 0 运行到 255。
-
您是只更改一个像素,还是打算将整个画布内容与背景混合?如果您将画布像素设置为不透明度
-
是的,但我需要的是取一个像素的颜色而不是所有画布的颜色。我试图不混合它,因为每次我改变颜色都必须改变它。但我认为生病必须这样做。我看到的唯一问题是内存可以让 javascript 和 canvas 多次改变颜色。
标签: javascript html canvas