//问题:
//颜色不对应。
//代码如下:
//(纯二进制读入bmp文件,主要用到了函数CreateDIBSection。)BITMAPFILEHEADER bmfHeader;
BITMAPINFO bmInfo;
DWORD dwBitsSize;
void* pBits;FILE * fp = fopen(filename,"rb");
if (fp)
{
fseek(fp,0l,SEEK_END);
dwBitsSize = ftell(fp);
fseek(fp,0l,SEEK_SET); unsigned long bmfHeaderSize = sizeof(bmfHeader); fread(&bmfHeader,sizeof(unsigned char),bmfHeaderSize,fp);
unsigned long bmInfoSize = sizeof(BITMAPINFOHEADER); fread(&bmInfo,sizeof(unsigned char),bmInfoSize,fp); else int w = bmInfo.bmiHeader.biWidth;
int h = bmInfo.bmiHeader.biHeight;
int bitcount = bmInfo.bmiHeader.biBitCount; if (24 > bitcount)
{
unsigned char * pColorTable
                           = new unsigned char [sizeof(RGBQUAD) << bitcount];
fread(pColorTable, sizeof(unsigned char), (sizeof(RGBQUAD) << bitcount), fp);
RGBQUAD * pbmiColors = (RGBQUAD*)pColorTable;
BITMAPINFO *info =
(BITMAPINFO*)malloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD) << nbits); info->bmiHeader = bmInfo.bmiHeader;
memcpy(info->bmiColors, pbmiColors, sizeof(RGBQUAD) << bitcount);          CDC * pdc = new CDC ; HBITMAP hbmp = CreateDIBSection( pdc->GetSafeHdc(),
info,
DIB_RGB_COLORS,
&pBits,
NULL,
0); }
else          ...//代码完
//求解决!

解决方案 »

  1.   

    BITMAPINFO *info =(BITMAPINFO*)malloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD) 
    --------------------------------------------------------------------------------
    貌似这里不对?
    BITMAPINFO *info =(BITMAPINFO*)malloc(sizeof(BITMAPINFO) + 256*sizeof(RGBQUAD)
      

  2.   

    BITMAPINFO *info =
    (BITMAPINFO*)malloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD) << nbits);一行显示不了,到下一行了!
      

  3.   

    BITMAPINFO *info =
    (BITMAPINFO*)malloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD) << bitcount);还是不行!
    急死我了!