我已經使用這個代碼精確嘗試有顏色的RGB代碼:問題在Javascript中的色彩和帆布
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的價值是什麼? – EMMERICH 2010-10-20 08:59:34
svPixel [3]從0到255運行。 – 2010-10-20 09:04:48
您只是更改一個像素,還是打算將整個畫布內容與背景混合?如果將畫布像素設置爲不透明度<255,則它們將與底層元素和背景混合,無需額外的工作。 – andrewmu 2010-10-20 09:30:13