Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 彩色图像到矩阵和矩阵返回到图像_Java - Fatal编程技术网

Java 彩色图像到矩阵和矩阵返回到图像

Java 彩色图像到矩阵和矩阵返回到图像,java,Java,我有一个MxN的彩色图像,在x行列格式。我想将图像的所有红色分量存储在单独的矩阵中,所有绿色分量存储在单独的矩阵中,所有蓝色分量存储在单独的矩阵中。对所有三个矩阵执行变换,并生成洗牌后的RGB图像。我可以使用下面的代码将其存储在单个矩阵中,但无法将其存储在三个单独的矩阵中 double[]img=new double[bi.getHeight()][bi.getWidth()] img[i][j]=bi.getRGB(i,j)截至,您有几种可能: 您需要初始化阵列: int[][] blue =

我有一个MxN的彩色图像,在x行列格式。我想将图像的所有红色分量存储在单独的矩阵中,所有绿色分量存储在单独的矩阵中,所有蓝色分量存储在单独的矩阵中。对所有三个矩阵执行变换,并生成洗牌后的RGB图像。我可以使用下面的代码将其存储在单个矩阵中,但无法将其存储在三个单独的矩阵中

double[]img=new double[bi.getHeight()][bi.getWidth()]

img[i][j]=bi.getRGB(i,j)

截至,您有几种可能:

您需要初始化阵列:

int[][] blue = new int[bi.getHeight()][bi.getWidth()];
int[][] green = new int[bi.getHeight()][bi.getWidth()]; 
int[][] red = new int[bi.getHeight()][bi.getWidth()]; 
int[][] alpha = new int[bi.getHeight()][bi.getWidth()]; 
1) 简单易懂,开销稍大:使用

(二)

3) 然后再次提取值(这更多的是理论值,在不知道自己在做什么的情况下不要使用)

将该值打印为无符号32位十六进制值:

String s = Integer.toString(bi.getRGB(x,y), 16)
blue[x][y] = Integer.parseInt(s.substring(24, 32), 2);
green[x][y] = Integer.parseInt(s.substring(16, 24), 2);
red[x][y] = Integer.parseInt(s.substring(8, 16), 2);
alpha[x][y] = Integer.parseInt(s.substring(0, 8), 2);
输出的每两个字符都是ARGB集的一部分

4) 使用(不清楚是否可以使用)

它有
getAlpha
getRed
等方法,但像素是单个一维数组。如果有人知道如何使用它,请放心

int color = bi.getRGB(x, y);

// Components will be in the range of 0..255:
blue[x][y] = color & 0xff;
green[x][y] = (color & 0xff00) >> 8;
red[x][y] = (color & 0xff0000) >> 16;
alpha[x][y] = (color & 0xff000000) >>> 24;
String s = Integer.toString(bi.getRGB(x,y), 16)
blue[x][y] = Integer.parseInt(s.substring(24, 32), 2);
green[x][y] = Integer.parseInt(s.substring(16, 24), 2);
red[x][y] = Integer.parseInt(s.substring(8, 16), 2);
alpha[x][y] = Integer.parseInt(s.substring(0, 8), 2);