2014-10-08 6 views
-1

픽셀 데이터를 2D 배열로로드하려고합니다. 이미 헤더를로드 했으므로 iData 배열은 1 차원 배열로 이미지 데이터를 바이트 단위로 보유하지만 2 차원 배열로 원합니다. adjWidth는 00 바이트 패딩을 포함한 너비입니다.비트 맵에서 이미지 데이터를 읽고 2D 배열에 저장하는 방법은 무엇입니까?

// get image byteData 
byte[] iData = new byte[this.size - 54]; 
try { 
    fin.read(iData); 
} catch (IOException ex) { 
    System.err.printf("ERROR: File %s is unreadable!\n", filename); 
    Logger.getLogger(Bitmap.class.getName()).log(Level.SEVERE, null, ex); 
} 

// send pixels to the buffer array 
// pixels are organized from bottom row to top 
this.buffer = new byte[this.height][adjWidth]; 
for(int i = this.height - 1; i > 0; i--) { 
    for(int j = adjWidth - 1; j > 0; j--) { 
     this.buffer[i][j] = iData[adjWidth*i + j]; 
     System.out.print(this.buffer[i][j] + " "); 
    } 
    System.out.println(); 
} 

그러나 내가로드중인 파일의 16 진수 편집기와 비교할 때 내 출력이 올바르지 않습니다. 정확히 내가 뭘 잘못하고 있니?

답변

0

코드 수정 됨 ... 바이트 필요하면 바이트를 읽고 있다면 것은 다른 독서의 정수는이 경우 하나 개의 샘플 또는 픽셀 (정수)에이라고 4 (네)를 기억

BufferedImage BufImgEnt0 = null; 
    BufImgEnt0 = ImageIO.read(new File("...")); // Need Try..Catch 

    int OneDArray[] = new int[BufImgEnt0.getWidth()*BufImgEnt0.getHeight()]; 


    byte bufferR = new byte[BufImgEnt0.getWidth()][BufImgEnt0.getHeight()]; 
    byte bufferG = new byte[BufImgEnt0.getWidth()][BufImgEnt0.getHeight()]; 
    byte bufferB = new byte[BufImgEnt0.getWidth()][BufImgEnt0.getHeight()]; 
    byte bufferA = new byte[BufImgEnt0.getWidth()][BufImgEnt0.getHeight()]; 

    int RGBA; 
    for (int i = 0; i<BufImgEnt0.getWidth();i++){//Begin for i 
    for (int j = 0; j<BufImgEnt0.getHeight();j++){//Begin for j 
     RGBA = BufImgEnt0.getRGB(i, j); //Here you have already 2D array 

     OneDArray[i*BufImgEnt0.getHeight()+j] = BufImgEnt0.getRGB(i, j); //To One Array 

     bufferR[i][j] = (byte)getR(RGBA); 
     bufferG[i][j] = (byte)getG(RGBA); 
     bufferB[i][j] = (byte)getB(RGBA); 
     bufferA[i][j] = (byte)getAlpha(RGBA); 
    }//End for j 
    }//End For i 


private int getB(int RGB){ 
    return (RGB>>0)&0xFF; 
} 
private int getG(int RGB){ 
    return (RGB>>8)&0xFF; 
} 
private int getR(int RGB){ 
    return (RGB>>16)&0xFF; 
} 
private int getAlpha(int RGB){ 
    return (RGB>>24)&0xFF; 
} 

귀하의 코드를 확인, 크기는 heightxWidth x 4, 각 픽셀은 4 바이트가 필요합니다 ...

관련 문제