2015-02-06 44 views
0

我有三个二维数组,分别持有一个图像的红色,绿色和蓝色像素值。使用的初始图像是一个模糊的图像,然后被分割成这些RGB值,以便我可以在每个阵列上运行函数来去除图像。然后我需要连接这些数组(可能会创建一个新的3D数组)并显示结果图像。如何连接三个二维数组,然后将结果显示为图像?

到目前为止,我试过使用System.arraycopy(),但这只给我int值,我正在处理双精度数组。

我也试着给每个二维数组叠加到对方创建三维阵列,像这样,

for(int i = 0; i<redPixels.length; i++){ 
     for(int j = 0; j<redPixels[0].length; j++){ 
      concatPixels[i][j][1] = redPixels[i][j]; 
     } 
    } 

    for(int i = 0; i<greenPixels.length; i++){ 
     for(int j = 0; j<greenPixels[0].length; j++){ 
      concatPixels[i][j][2] = greenPixels[i][j]; 
     } 
    } 

    for(int i = 0; i<bluePixels.length; i++){ 
     for(int j = 0; j<bluePixels[0].length; j++){ 
      concatPixels[i][j][3] = bluePixels[i][j]; 
     } 
    } 

,但我得到一个ArrayIndexOutOfBoundsException当谈到第三for循环,当我尝试将bluePixels添加到concatPixels数组中。

另外,一旦我能够连接二维数组,我怎样才能显示一个3D数组作为图像。我一直在使用BufferedImage,它似乎只处理二维数组。

回答

0

图像通常以RGB [A](PNG格式)格式或BGR格式或其他格式(可能还包括Alpha通道)存储。所以,如果你想有一个PNG格式,您的代码将是这个样子:

int[][][] array = new int[redPixels.length][redPixels[0].length][3] ; 
for(int i = 0; i<redPixels.length; i++){ 
    for(int j = 0; j<redPixels[0].length; j++){ 
     concatPixels[i][j][0] = redPixels[i][j]; 
     concatPixels[i][j][1] = greenPixels[i][j]; 
     concatPixels[i][j][2] = bluePixels[i][j]; 
    } 
} 

代码假定redPixels,greenPixels和bluePixels的行和列数完全相同。

+0

感谢您的回复。出于某种原因,当涉及到行concatPixels [i] [j] [3] = bluePixels [i] [j]时,我仍然得到一个ArrayIndexOutOfBoundsException;即使我的数组的所有长度都是1024. – skelto 2015-02-07 15:38:37

+0

已编辑的代码。现在它应该可以正常工作。 :) – 2015-02-08 18:01:54

+0

当然是啊!非常感谢!对不起,我不能投票,因为我没有足够的代表。你会知道如何将3D阵列显示为图像吗? – skelto 2015-02-09 13:20:08

相关问题