2017-08-25 17 views
2

私は300px * 300pxのイメージを持っています。また、すべての方向に100ピクセルごとにいくつかの特定のピクセルがあります(合計16ピクセルまで)。Javascript 2D配列と1D配列との間

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

Iは、特定の画素で囲まれたブロック内に(特定のものを除く)すべての画素を配置するが、1Dアレイではなく、2次元配列の画素値によって定義されます。画素ごとに

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を使用していたので、これは不幸にも問題を解決しません。 –

+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]) 
    } 
} 

あなたが言ったようにすべてのインデックスを除外する必要があります。これは、幅のある画像のピクセルの配列のままです。

関連する問題