将灰度原始格式转换为bmp格式

时间:2014-03-19 12:09:09

标签: image-processing bmp grayscale

我正在尝试编写一个程序,根据bmp格式重新排列灰度原始文件中的像素。但我想我会犯一些我不知道的错误。有人能告诉我以下代码有什么问题吗? specs表示BMP格式的像素由3个字节组成。原始图像阵列上的第一行放置在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图像。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您对目标偏移量的计算是错误的。

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