gpt4 book ai didi

javascript - 移动设备上的 Canvas 返回错误的颜色

转载 作者:行者123 更新时间:2023-11-28 00:07:39 25 4
gpt4 key购买 nike

我正在将 3 种颜色的图像加载到移动 Android 设备(三星 Galaxy S3)上的 HTMLCanvas 元素中。当检查使用的 imageData 中使用的颜色时,我得到了更多的颜色。在普通 PC 上运行相同的代码时,我得到了准确的颜色和计数。

示例代码:

function getColorsFromImageData (imageData) { 
var colors = {};
var data = imageData.data;

for (var i = 0, len = data.length; i < len; i += 4) {
if (data[i+3] == 0) continue;
var rgb = data[i] + "," + data[i+1] + "," + data[i+2];
if (colors[rgb])
colors[rgb]++;
else
colors[rgb] = 1;
}
return colors;
};

function createColorElement (color, count) {
var elm = document.createElement("span");
elm.style.backgroundColor = "rgb(" + color + ")";
elm.className = "color";
elm.innerHTML = color + " (" + count + ")";
document.getElementById("colors").appendChild(elm);
}

window.onload = function() {
var canvas = document.getElementById("c");
var img = new Image();
img.onload = function() {
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img,0,0);

var data = ctx.getImageData(0, 0, img.width, img.height);
var colors = getColorsFromImageData(data);

var count = 0;
for (var color in colors) {
createColorElement(color, colors[color]);
count++;
}

document.getElementById("count").innerHTML = count;
}
img.src = "test.png";
};

这是一个 fiddle :http://jsfiddle.net/d6714wdg/

如何在移动设备上获得准确的颜色?

背景:我创建了一个基于HTMLCanvas的在线设计器。我需要精确的颜色值并且不需要抗锯齿,因为所有颜色都需要符合一组与所用羊毛颜色相匹配的预定义颜色。

感谢您的帮助。

最佳答案

您面临的问题是由于 Canvas 默认对 drawImage() 进行平滑处理造成的。

可以通过设置上下文的 imageSmoothingEnabled 来关闭此功能属性设置为false

此属性尚未稳定,您需要构造函数前缀:

 ctx.mozImageSmoothingEnabled = false;
ctx.webkitImageSmoothingEnabled = false;
ctx.msImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
ctx.drawImage(img, 0, 0);

updated fiddle

关于javascript - 移动设备上的 Canvas 返回错误的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com