怎样判断BMP是否是256色?(程序)

解决方案 »

  1.   

    /*************************************************************************
     *
     * 函数名称:
     *   DIBNumColors()
     *
     * 参数:
     *   LPSTR lpbi         - 指向DIB对象的指针
     *
     * 返回值:
     *   WORD               - 返回调色板中颜色的种数
     *
     * 说明:
     *   该函数返回DIB中调色板的颜色的种数。对于单色位图,返回2,
     * 对于16色位图,返回16,对于256色位图,返回256;对于真彩色
     * 位图(24位),没有调色板,返回0。
     *
     ************************************************************************/
    WORD WINAPI DIBNumColors(LPSTR lpbi)
    {
    WORD wBitCount; // 对于Windows的DIB, 实际颜色的数目可以比象素的位数要少。
    // 对于这种情况,则返回一个近似的数值。

    // 判断是否是WIN3.0 DIB
    if (IS_WIN30_DIB(lpbi))
    {
    DWORD dwClrUsed;

    // 读取dwClrUsed值
    dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)->biClrUsed;

    if (dwClrUsed != 0)
    {
    // 如果dwClrUsed(实际用到的颜色数)不为0,直接返回该值
    return (WORD)dwClrUsed;
    }
    } // 读取象素的位数
    if (IS_WIN30_DIB(lpbi))
    {
    // 读取biBitCount值
    wBitCount = ((LPBITMAPINFOHEADER)lpbi)->biBitCount;
    }
    else
    {
    // 读取biBitCount值
    wBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount;
    }

    // 按照象素的位数计算颜色数目
    switch (wBitCount)
    {
    case 1:
    return 2; case 4:
    return 16; case 8:
    return 256; default:
    return 0;
    }
    }
      

  2.   

    The BITMAPCOREHEADER structure contains information about the dimensions and color format of a device-independent bitmap (DIB). typedef struct tagBITMAPCOREHEADER { // bmch 
        DWORD   bcSize; 
        WORD    bcWidth; 
        WORD    bcHeight; 
        WORD    bcPlanes; 
        WORD    bcBitCount; 
    } BITMAPCOREHEADERbcBitCount是8,则为256色