JavaScript在特定计算机上运行速度非常慢
我编写了一个代码,获取黑白图像,检查特定区域(正方形)中的像素,最后返回其中有多少是黑色的,该区域的每个像素在For循环中读取,如下一个示例:JavaScript在特定计算机上运行速度非常慢,javascript,Javascript,我编写了一个代码,获取黑白图像,检查特定区域(正方形)中的像素,最后返回其中有多少是黑色的,该区域的每个像素在For循环中读取,如下一个示例: function is_box_black_corner(x,y,width,heigth){ var counter=0; for (var i=x; i<(x+width); i++){ for (var j=y; j<(y+heigth); j++){ if(my_isbl
function is_box_black_corner(x,y,width,heigth){
var counter=0;
for (var i=x; i<(x+width); i++){
for (var j=y; j<(y+heigth); j++){
if(my_isblack(i,j)==1){
counter++;
}
}
}
函数为“长方体”黑色“角(x、y、宽度、高度){
var计数器=0;
对于(var i=x;i我将尝试调用@ASDFGerte建议的getImageData
:
var x=10; var y=10; var width=50; var height=50;
var counter=0;
var image;
var p; //global data
function init(){
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(10, 10, 50, 50); //this is just a black square
image = ctx.getImageData(x, y, width, height); //Load the image
p = image.data; //get the data of the image
is_box_black_corner();
};
function is_box_black_corner(){
for (var i=x; i<(x+width); i++){
for (var j=y; j<(y+height); j++){
if(my_isblack(i,j)==1){
counter++;
}
}
}
console.log(counter);
};
function my_isblack(x,y){
if(p[0]<50 && p[1]<50 && p[2]<50){ //check the global data
return 1;
}
else{
return 0;
}
};
var x=10;var y=10;var宽度=50;var高度=50;
var计数器=0;
var图像;
var p;//全局数据
函数init(){
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.fillStyle=“黑色”;
fillRect(10,10,50,50);//这只是一个黑色正方形
image=ctx.getImageData(x,y,宽度,高度);//加载图像
p=image.data;//获取图像的数据
盒子是黑色的吗;
};
函数是\u box\u black\u corner(){
对于(var i=x;i我将尝试调用@ASDFGerte建议的getImageData
:
var x=10; var y=10; var width=50; var height=50;
var counter=0;
var image;
var p; //global data
function init(){
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(10, 10, 50, 50); //this is just a black square
image = ctx.getImageData(x, y, width, height); //Load the image
p = image.data; //get the data of the image
is_box_black_corner();
};
function is_box_black_corner(){
for (var i=x; i<(x+width); i++){
for (var j=y; j<(y+height); j++){
if(my_isblack(i,j)==1){
counter++;
}
}
}
console.log(counter);
};
function my_isblack(x,y){
if(p[0]<50 && p[1]<50 && p[2]<50){ //check the global data
return 1;
}
else{
return 0;
}
};
var x=10;var y=10;var宽度=50;var高度=50;
var计数器=0;
var图像;
var p;//全局数据
函数init(){
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.fillStyle=“黑色”;
fillRect(10,10,50,50);//这只是一个黑色正方形
image=ctx.getImageData(x,y,宽度,高度);//加载图像
p=image.data;//获取图像的数据
盒子是黑色的吗;
};
函数是\u box\u black\u corner(){
对于(var i=x;当图像始终相同时,为每个像素调用getImageData
似乎是不必要的。不确定画布是否有一些优化,但值得怀疑。这与计算机之间的差异无关。您是否在每台计算机上使用相同的浏览器?这可能会比计算机产生更大的影响,除非计算机ters的速度异常缓慢。我对所有的ters都使用chrome。我甚至只是安装了一次,但没有工作。你是如何测量时间的?再看一次,除非它是一个相当大的图像,否则这应该低于人们可以看到并注意到的差异。我想知道如果你减少getImageData调用一个,并在每次my_isblack
调用中重复使用该数据。除非您的图像和图像区域非常大,否则我希望此任务应该非常快。当图像始终相同时,为每个像素调用getImageData
似乎是不必要的。不确定画布是否有一些优化,但值得怀疑。Unre不过,这与计算机之间的差异有关。您是否在每台计算机上使用相同的浏览器?这可能会产生比计算机更大的影响,除非计算机速度异常缓慢。我对所有计算机都使用chrome。我甚至只安装了一次chrome,但没有成功。您如何测量时间?请再次查看,除非是r对于大型图像,这应该低于人们可以看到并注意到的差异。我想知道如果您将getImageData
调用减少到一个,并在每次my_isblack
调用中重用该数据,这一切是否都无关紧要。除非您的图像和图像区域非常大,否则我希望此任务应该非常快。