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

时间:2015-11-13 15:27:56

标签: java

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

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

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

1 个答案:

答案 0 :(得分:1)

Understanding BufferedImage.getRGB output values开始,您有几种可能性:

您需要初始化数组:

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)最简单易懂,更多开销:使用Color

Color mycolor = new Color(img.getRGB(x, y));
red[x][y] = mycolor.getRed();
blue[x][y] = mycolor.getBlue();
green[x][y] = mycolor.getGreen();

2)do those computations by hand

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;

3)print as a String并再次提取值(这更多是理论值,不要在不知道你做什么的情况下使用它)

将值打印为无符号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)使用ColorModel(目前还不清楚是否可以这样做)

它有getAlphagetRed等方法,但像素是单个1-D数组。如果有人知道如何使用它,请随意。

相关问题