Javascript 将HTML画布中的像素颜色处理为另一种颜色,但颜色相同

Javascript 将HTML画布中的像素颜色处理为另一种颜色,但颜色相同,javascript,colors,html5-canvas,Javascript,Colors,Html5 Canvas,我有一个函数,可以让我在一张暂时看不见的画布上画一幅图像,来操纵颜色,并将所有不是纯黑色的东西改变为特定的颜色,但是,保持原来的白色“阴影” 但是,当尝试执行该操作时,颜色比应该的颜色深得多 我编写了一个函数,用新颜色减去旧颜色,再减去255,来替换颜色 for(var i = 0; i < imageData.data.length; i+=4) { if((imageData.data[i] != 0 && imageData.d

我有一个函数,可以让我在一张暂时看不见的画布上画一幅图像,来操纵颜色,并将所有不是纯黑色的东西改变为特定的颜色,但是,保持原来的白色“阴影”

但是,当尝试执行该操作时,颜色比应该的颜色深得多

我编写了一个函数,用新颜色减去旧颜色,再减去255,来替换颜色

    for(var i = 0; i < imageData.data.length; i+=4) {
      if((imageData.data[i] != 0 &&
          imageData.data[i + 1] != 0 &&
          imageData.data[i + 2] != 0)) {

        imageData.data[i] = newColor.r - (255 - imageData.data[i]);
        imageData.data[i + 1] = newColor.g - (255 - imageData.data[i + 1]);
        imageData.data[i + 2] = newColor.b - (255 - imageData.data[i + 2]);

        if(imageData.data[i] > 255)
          imageData.data[i] = 255;

        if(imageData.data[i + 1] > 255)
          imageData.data[i + 1] = 255;

        if(imageData.data[i + 2] > 255)
          imageData.data[i + 2] = 255;
      }
    }
for(变量i=0;i255)
imageData.data[i]=255;
if(imageData.data[i+1]>255)
imageData.data[i+1]=255;
if(imageData.data[i+2]>255)
imageData.data[i+2]=255;
}
}

考虑到新的颜色是#44698B(r:68,g:105,b:139),稍微灰色的白色#999(153153153)部分的结果是#000325(0,3,36),而它应该是#2F4860(47,72,96)。

在保持阴影的同时转换RGB值是困难的。我建议换成HSL。这里有一个主题链接:

在保持阴影的同时转换RGB值很困难。我建议换成HSL。这里有一个主题链接:

谢谢。经过两个小时的持续头痛,我终于得到了我需要的东西。新的构造函数如下所示。。。亮度的计算方法是:取新颜色的亮度,将其除以一个整数,将旧亮度乘以该乘数,根据旧颜色给出新颜色的新亮度
(oldColorLightness*(oldColorLightness/1.0))
。谢谢。经过两个小时的持续头痛,我终于得到了我需要的东西。新的构造函数如下所示。。。亮度的计算方法是:取新颜色的亮度,将其除以一个整数,将旧亮度乘以该乘数,根据旧颜色给出新颜色的新亮度
(oldColorLightness*(oldColorLightness/1.0))