我现一张256色 32*32使用索引的位图。它的大小是1.39k。如果按照调色板256项*4Byte
的话,加上32*32Byte象素索引,再怎么也至少要2k吧。
是否不同的每张位图颜色表(调色板)大小不一样呢?
如果不一样我如何取得调色板大小。
如果调色板大小不一,我如何获得位图资源(不是文件)的图像数据区?

解决方案 »

  1.   

    1.39K也没什么问题。你的图像可能是压缩的。位图一般用RLE方式压缩。你可以看看位图头信息,是否设置了压缩标记。256色图的调色板固定是256*4字节。这是没有问题的。
      

  2.   

    位图的信息在BITMAPINFOHEADER中有定义,在BMP文件的开头。
      

  3.   

    to  happyparrot(快乐鹦鹉): biCompression=0
    没有压缩啊。我现在把装载的位图资源,显示出来:
    HGLOBAL   hBMP[13];
    HINSTANCE hInstance=AfxGetInstanceHandle();
    HRSRC hResource = ::FindResource(hInstance, MAKEINTRESOURCE(IDB_BITMAP1+i),RT_BITMAP);
    hBMP[i] = ::LoadResource(hInstance, hResource);
    BITMAPINFO *lptrInfo=(BITMAPINFO *)LockResource(hBMP[i]);for(int j=0;j<=255;j++)//获取调色板
    {
    PatternArray[i]->Palette[j].Blue =(lptrInfo->bmiColors+j)->rgbBlue;
    PatternArray[i]->Palette[j].Green=(lptrInfo->bmiColors+j)->rgbGreen;
    PatternArray[i]->Palette[j].Red  =(lptrInfo->bmiColors+j)->rgbRed;
    }
    PatternArray[i]->Data=(BYTE *)LockResource(hBMP[i])+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;//此处取位图象数据。
    可是显示出来的位图不正确。
    我这样取资源数据不知正确否?
      

  4.   

    patternArray是我自定义保存位图数据的结构体。
      

  5.   

    晕,当然有可能不同,你漏了:
    判断BITMAPINFOHEADER的biClrUser值域,直接Lock:
    hBMP[i])+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;
    而取得位数据,是极有可能错误的..