2014-03-19 10 views
0

그레이 스케일 원시 파일의 픽셀을 bmp 형식으로 재배치하는 프로그램을 작성하려고합니다. 그러나 나는 내가 모르는 실수를 할 것이라고 생각한다. 누군가 다음 코드를 잘못 읽었습니까? 사양에 따르면 BMP 형식의 픽셀은 3 바이트로 구성됩니다. 원시 이미지 배열의 첫 번째 행은 bmp 픽셀 배열의 맨 아래 행에 배치되고, 두 번째 행은 두 번째 맨 아래 행에 배치됩니다. 그래서 나는 BMP 헤더에 대한 GUI 코드를 제외하고 같은 핵심 코드를 작성하고 하나그레이 스케일 원시 형식을 bmp 형식으로 변환

void MyClass_MakeBMP(void) 
{ 

    int i,j,k ; 
    /* m_uiWidth and m_uiHeight are rows and cols for the raw image, respectively. */ 
    m_BMPheader.biWidth = m_uiWidth; 
    m_BMPheader.biHeight = m_uiHeight; 

    // raw format buffer -> 2d array. 
    // bmp format buffer -> 1d array. 
    // m_pcImgbuf is 1d array for a raw file. 
    // m_pcBMP is 2d array to be copied from m_pcImgbuf. 

    for(i = 0 ; i < m_uiHeight; i++) 
    { 
     k = -1; // index into m_pcImgbuf. 
     for(j = 0 ; j < m_uiWidth * 3; j++) 
     { 
      if(j % 3 == 0) 
       k++; 

      m_pcBMP[i * m_uiHeight + j] = m_pcImgbuf[(m_uiHeight - 1) - i][k]; 

     } 
    } 



} 

은 또한, 나는 패딩 걱정하지 않는다,이 프로그램은 입력으로 취 할 수 있기 때문에, * 256 256, 128 * 128, 및 512 * 512 이미지. 미리 감사드립니다.

답변

2

대상 오프셋에 대한 계산이 잘못되었습니다.

m_pcBMP[i * 3*m_uiWidth + j] = ... 
+0

통찰력을 주셔서 감사합니다. – inherithandle