我已将色轮的图像加载到画布上,并且我在数组中有一个色调值列表。我遍历画布上的每个像素,并删除匹配相同色调值的像素。
代码是:
var element = document.getElementById("wheel-canvas");
var c = element.getContext("2d");
var image = c.getImageData(0, 0, 375, 375);
var imageData = image.data;
paletteList = this.collection.pluck('hsv');
for (var i = 0, n = imageData.length; i < n; i += 4) {
var hsv = this.model.convertRGBToHSV(imageData[i], imageData[i+1], imageData[i+2]);
var hue = hsv[0];
var sat = hsv[1];
var val = hsv[2];
$.each(paletteList, function(index, value) {
if (hue === value[0])
{
imageData[i] = '0';
imageData[i+1] = '0';
imageData[i+2] = '0';
}
});
}
c.putImageData(image, 0, 0);
现在我希望所有与色调不匹配的像素变为黑色。我做了一个代码更改:
if (hue !== value[0])
我得到以下结果:
为什么它看起来不像第一个圆圈的倒数?
谢谢!
答案 0 :(得分:5)
您确定哪些像素设置为黑色的逻辑是错误的。
请注意,在each
循环中,每个像素的色调将不等于调色板列表中的某些色调,因此所有这些色调都将设置为黑色。
您真正想要对每个像素执行的操作是检测其色调是否>>在托盘列表中。
var matched = false;
$.each(paletteList, function(index, value) {
if (hue === value[0]) {
matched = true;
return false;
}
}
if (!matched) {
imageData[i] = '0';
imageData[i+1] = '0';
imageData[i+2] = '0';
}
答案 1 :(得分:2)
您需要使用!=
表示“不相等”,因为您只想比较这些值。
检查一下:Javascript comparison
!==
还会比较不同的身份/对象(如Kees所提到的)。
答案 2 :(得分:2)
等同和身份之间存在差异。
平等(==,!=)
- 如果两个表达式的类型不同,请尝试转换 它们是字符串,数字或布尔值。
- NaN不等于包括其本身在内的任何东西。
- 负零等于正零。
- null等于null和undefined。
- 如果值是相同的字符串,则数值被认为是相等的 等价数字,相同对象,相同布尔值或(如果 他们可以被强迫进入其中一种情况。
- 其他所有比较都被视为不平等。
身份(===。!==)
这些运算符的行为与除了no之外的相等运算符相同 完成类型转换,类型必须相同 被认为是平等的。
Source.所以!==
不能成为问题。
答案 3 :(得分:0)
无法找到您所指的运营商。我建议你使用!(a === b)
答案 4 :(得分:0)
您正在使用!==将字符串与整数进行比较。这将始终返回false。 查看http://jsfiddle.net/k4EAQ/
使用!= Javascript不检查类型,并会给你你想要的。但是如果你想使用!==你可以随时将变量转换为整数或字符串,这样你就可以确定它们与类型匹配。