2017-08-25 124 views
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 *(最大間隔 - 當前間隔)爲內部間隔進行移位。

+0

你的常量「gridY」不應該是「const gridY = height /(trueY - 1);」而不是「寬度」? – Matus

+0

是的,你說得對。這並沒有解決不好的問題,因爲測試我使用了300 * 300px,這意味着height = width。 –

+0

是的,我注意到了,因此評論不是答案:) – Matus

回答

0

如果我明白了,您想「過濾」一些像素,這些像素在x和y方向上以某個間隔出現?

const img = <image array>, 
     imgWidth = 600, 
     gridX = 150, 
     gridY = 200; 

let result = []; 

for (let i = 0; i < input.length; i++) { 
    let x = i % imgWidth, 
     y = Math.floor(i/imgWidth); 

    if (!(x % gridX == 0 || y % gridY == 0)) { 
    result.push(input[i]) 
    } 
} 

這應該篩選出所有與您所說的一樣特殊的索引。它仍然是具有寬度的圖像的像素陣列。