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