Java BuffereImage setRgb getRgb,2个不同的结果

Java BuffereImage setRgb getRgb,2个不同的结果,java,bufferedimage,java-2d,Java,Bufferedimage,Java 2d,我正在尝试将图像转换为矩阵并将其转换回,但这两张图片不同: 将其转换为矩阵: public int[][] getMatrixOfImage(BufferedImage bufferedImage) { int width = bufferedImage.getWidth(null); int height = bufferedImage.getHeight(null); int[][] pixels = new int[width][height]; for

我正在尝试将图像转换为矩阵并将其转换回,但这两张图片不同: 将其转换为矩阵:

 public int[][] getMatrixOfImage(BufferedImage bufferedImage) {
    int width = bufferedImage.getWidth(null);
    int height = bufferedImage.getHeight(null);
    int[][] pixels = new int[width][height];
    for (int i = 0; i < width; i++) {
        for (int j = 0; j < height; j++) {
            pixels[i][j] = bufferedImage.getRGB(i, j);
        }
    }

    return pixels;
}
public int[][]getMatrixOfImage(BuffereImage BuffereImage){
int width=bufferedImage.getWidth(null);
int height=bufferedImage.getHeight(null);
int[][]像素=新int[宽度][高度];
对于(int i=0;i
并将其转换回BuffereImage:

   public BufferedImage matrixToBufferedImage(int[][] matrix) {
    int width=matrix[0].length;
    int height=matrix.length;
    BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);

    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[0].length; j++) {

            int pixel=matrix[i][j] <<24|matrix[i][j] <<16|matrix[i][j]<<8|matrix[i][j] ;
            bufferedImage.setRGB(i, j, pixel);
        }
    }
    return bufferedImage;

}
公共缓冲区映像矩阵xtobufferedimage(int[][]矩阵){
整数宽度=矩阵[0]。长度;
整数高度=矩阵长度;
BuffereImage BuffereImage=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_ARGB_PRE);
对于(int i=0;i
int pixel=matrix[i][j] <<24|matrix[i][j] <<16|matrix[i][j]<<8|matrix[i][j];

这是解决方案,我会在获得许可后标记。没问题,只是想知道出于性能原因,您应该避免getRGB/setRGB(每次调用都会进行昂贵的颜色空间计算),可以通过BuffereImage的光栅到达图像后面的阵列。
int pixel=matrix[i][j];