BMP文件读取时的一点疑问

来源:百度知道 编辑:UC知道 时间:2024/05/18 07:23:54
这是读取BMP图像文件的其中一段代码,主要是用于判断是否需要读取调色板。
头文件中的声明:
PBITMAPINFO pBitMapInfo;//图像文件信息(包括图像文件信息头和调色板)
BitCount=pBitMapInfo.bmiHeader.biBitCount

if (BitCount != 24) // 对于8bit的图像,需要读取调色板
{
//读取调色板
ColorUsed = pBitMapInfo->bmiHeader.biClrUsed;
if (ColorUsed ==0)
{
ColorUsed = (1<<(pBitMapInfo->bmiHeader.biBitCount));
pBitMapInfo->bmiHeader.biClrUsed = ColorUsed;
}
file.Read((BYTE *)pBitMapInfo+sizeof(BITMAPINFOHEADER),
ColorUsed * sizeof(RGBQUAD));
}

问题在最后一行代码即
file.Read((BYTE *)pBitMapInfo+sizeof(BITMAPINFOHEADER), ColorUsed * sizeof(RGBQUAD))
理解不了。
1.么要把调色板读到(BYTE*)pBitMapInfo+sizeof(BITMAPINFOHEADER)指向的内存块?
2.什么要把这个指针强制转换成BYTE类型的
3.pBitMapInfo包含的是RGBQUAD和BITMAPINFOHEADER这两个结构,如果仅仅是读取调色板,我们只需要读到pBitMapInfo这个指针中,为什么还要加上sizeof(BITMAPINFOHEADER)中呢?

我尝试着去掉sizeof(BITMAPINFOHEADER),但是图像8位图像时,不是出现画面少一块,就是颜色变掉。
这是答案吗?

都什么年代了还读“调色板”。没这个必要。

一般窗口程序用的位图都是24位的;游戏用的位图是16位或以上。这年代你还用8位的位图,你也得好意思!

所以研究这个问题没意思,建议你用标准RGB的位图,忘了调色板吧……

////////////////////////////////////

基础?呵呵,的确,但也要起码赶得上年代啊。

以你的论断,那我建议你从1位的位图开始读起。那不是8位位图的基础吗?

基础也要建立在实用角度之上!现在没有用8位位图的了,你还研究有个屁意思。而且,8位位图和基于RGB空间的位图有很大不同,你把它研究得再透彻,对RGB的位图也没什么帮助的。不信的话你往后学就知道了!你会发现你现在的研究很愚蠢。