2013-09-26 63 views
0

我正嘗試一個圖像轉換成一個矩陣,並將其轉換回來,但2張圖片是不同的: 它轉換成一個矩陣:的Java的BufferedImage setRgb的getRGB,2個不同的結果

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

和轉換它放回一個BufferedImage:

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

謝謝!

+1

出於性能原因(每次調用都會導致昂貴的色彩空間計算),您應該避免使用getRGB/setRGB,可以通過BufferedImage的Raster訪問圖像後面的數組。 – lbalazscs

回答

2

你爲什麼這樣做

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

,而不是僅僅

int pixel=matrix[i][j]; 

+0

這就是爲什麼我很愚蠢;) – Laren0815

+0

這是否意味着你的問題解決了? –

+0

這是解決方案,我會標記,當我有權限。 – Laren0815

相關問題