【问题标题】:Java Bufferedimage setRgb getRgb, 2 different resultsJava Bufferedimage setRgb getRgb,2个不同的结果
【发布时间】:2013-09-26 14:07:54
【问题描述】:

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

 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 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;

}

结果如下:

http://img59.imageshack.us/img59/5464/mt8a.png

谢谢!

【问题讨论】:

  • 出于性能原因应该避免getRGB/setRGB(每次调用都会进行昂贵的色彩空间计算),可以通过BufferedImage的Raster到达图像后面的数组。

标签: java bufferedimage java-2d


【解决方案1】:

你为什么这样做

int pixel=matrix[i][j] <<24|matrix[i][j] <<16|matrix[i][j]<<8|matrix[i][j];

而不仅仅是

int pixel=matrix[i][j];

?

【讨论】:

  • 这是解决方案,我会在获得许可后标记。
  • 没问题,就是想知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多