【发布时间】:2015-05-12 20:36:33
【问题描述】:
我为 24 位 BMP 编写了一个小型 BMP 加载程序,它可以工作,只是它不显示颜色。一切都是灰度的,到处都有一些颜色(不是正确的颜色)。我的代码的加载器在下面
void BMP::Read(char* filename)
{
FILE* f;
unsigned char info[54];
if ((f = fopen(filename, "rb")) == NULL) return;
fread(info, sizeof(unsigned char), 54, f);
m_width = *(int*)&info[18];
m_height = *(int*)&info[22];
m_size = 3* m_width * m_height;
m_pdata = new unsigned char[m_size];
fread(m_pdata, sizeof(unsigned char), m_size, f);
fclose(f);
}
然后我使用以下公式访问数组:
red = m_pdata[(y * m_width + x) + 2];
blue = m_pdata[(y * m_width + x) + 0];
green = m_pdata[(y * m_width + x) + 1];
这里有什么建议吗?我认为问题出在加载功能上,但不确定。
【问题讨论】:
-
使用调试器 - 查看 m_pdata 的内容 - 看起来对吗?
-
第二个——红色、蓝色、绿色会发生什么,你如何显示它们?
-
你忘了这个因素:
4 * (y * m_width + x) + 0(或3 * …,不知道)。 -
每行末尾可能有填充,您没有考虑到。
标签: c++ binary-data bmp