我正在尝试编写一个程序,根据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图像。提前谢谢。
答案 0 :(得分:2)
您对目标偏移量的计算是错误的。
m_pcBMP[i * 3*m_uiWidth + j] = ...