系统显示你的8 bit(or low)dib过程,可以抽象理解为:
1: get u dib index
2: search u colors table
3: setpixel( x, y, RGB( index.r, index.g, index.b ) );
明显地,现在的系统所有RGB(XXX,XXX,XXX)都能显示,你说还用不用什么垃圾调色板之类的..
古老的就如这样:
1: get u dib index
2: search u colors table
3: setpixel( x, y, RGB( nearindex.r, nearindex.g, nearindex.b ) );
3a: nearindex = find_index_in20Colors(index); // 不实现调色板
3b: nearindex = find_index_in256Palette(index); // 实现调色板
当显示时,系统会作DIB->DDB的转换,由于系统是高发色数,能显示所有颜色,因此,8bit或以下的bmp使用位数据(实际上那是index)to色彩表映射时,能正确地映射所有的颜色而无须要实现调色板.
相反,在低发色数系统上(256or以下),由于系统只能正确显示系统自带的20种颜色,假如不实现调色板,是无法正确把bmiColors[x]里的颜色正确映射的.也就是说,显示时只会用系统自带的20种色来map(如不实现调色板)DIB的bmiColors[x],所以颜色就变成古古怪怪.
假如还不清楚的话,就去看看相关书籍/msdn或者自己动手实现一下, good luck