2
我有一个300像素300像素*图像。我在每个方向上每100px也有一些特定的像素(共16个特定像素)。的Javascript 2D阵列到1D阵列和间隔
0 1 2 <-- IntervalX
______ ______ ______
0 | | | |
|______|______|______|
1 | | | |
|______|______|______|
2 | | | |
|______|______|______|
^
IntervalY
欲把每一个像素(除了特定的)中由特定像素界定的块,但是在一维数组,而不是2D阵列由像素值来定义。
const gridX = width/(trueX - 1);
const gridY = width/(trueY - 1);
//循环对于每个像素:
intervalX = Math.floor((pixel[inc].x)/gridX);
intervalY = Math.floor((pixel[inc].y)/gridY);
//Implementing formula for transforming from 1D array to 2D array : (y * width + x) = item number
//All leftmost known pixels start from a "zero" value, so we do not need to substract 1
let isNotFirstArray;
if (intervalX == 0)
isNotFirstArray = 0;
else
isNotFirstArray = 1;
p1 = pixel[intervalY * gridY * 299 + intervalX * gridX - isNotFirstArray];
p2 = pixel[intervalY * gridY * 299 + (intervalX + 1) * gridX - 1];
p3 = pixel[(intervalY + 1) * gridY * 299 + intervalX * gridX - isNotFirstArray];
p4 = pixel[(intervalY + 1) * gridY * 299 + (intervalX + 1) * gridX - 1];
pixel[inc].value = Math.round(bilinearInterpolate(p1, p2, p3, p4, j, i));
inc++;
的问题是对于特定像素的值不正确地计算。 Y值是正确的,但X不是。
后来编辑: 错误是这样的:特定像素的坐标在Y轴上是正确的,但在X轴上是不正确的。它们以100px *(最大间隔 - 当前间隔)为内部间隔进行移位。
你的常量“gridY”不应该是“const gridY = height /(trueY - 1);”而不是“宽度”? – Matus
是的,你说得对。这并没有解决不好的问题,因为测试我使用了300 * 300px,这意味着height = width。 –
是的,我注意到了,因此评论不是答案:) – Matus