簡體   English   中英

Javascript 2D數組到1D數組和間隔

[英]Javascript 2D array to 1D array and interval

我有一個300px * 300px的圖像。 我在每個方向上每100px也有一些特定像素(總計16個特定像素)。

                      0      1      2       <-- IntervalX
                    ______ ______ ______
                0  |      |      |      |
                   |______|______|______|    
                1  |      |      |      | 
                   |______|______|______| 
                2  |      |      |      | 
                   |______|______|______| 
                ^
                 IntervalY

我想將每個像素(特定像素除外)放在由特定像素界定的塊中,但由1D數組而不是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 *(最大間隔-當前間隔)的內部間隔移動。

如果我做對了,您想“濾除”一些像素,這些像素在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])
  } 
}

那應該過濾掉所有與您所說的一樣特殊的索引。 它仍然是寬度為的圖像像素陣列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM