CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    Oct 1999
    Location
    Portland, OR
    Posts
    2

    How to determine if a BMP file is monochrome, grayscale, index color or rgb color

    I have a BMP bitmap loaded into memory. How can I tell if it is a monochrome, grayscale, index color or rgb color format? I thought I might be able to use bmBitsPixel, but a grayscale and an index color file are both 8bit/pixel. Can anyone point me in the right direction?


  2. #2
    Join Date
    Sep 1999
    Location
    Istanbul
    Posts
    85

    Re: How to determine if a BMP file is monochrome, grayscale, index color or rgb color

    #IMPORT
    ==============================================================================
    BITMAPINFO (3.0)



    typedef struct tagBITMAPINFO { /* bmi */
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD bmiColors[1];
    } BITMAPINFO;

    The BITMAPINFO structure fully defines the dimensions and color information
    for a Windows 3.0 or later device-independent bitmap (DIB).

    Member Description

    bmiHeader Specifies a BITMAPINFOHEADER structure that contains
    information about the dimensions and color format of a DIB.

    bmiColors Specifies an array of RGBQUAD structures that define the
    colors in the bitmap.

    Comments

    A Windows 3.0 or later DIB consists of two distinct parts: a BITMAPINFO
    structure, which describes the dimensions and colors of the bitmap, and an
    array of bytes defining the pixels of the bitmap. The bits in the array are
    packed together, but each scan line must be zero-padded to end on a LONG
    boundary. Segment boundaries, however, can appear anywhere in the bitmap. The
    origin of the bitmap is the lower-left corner.

    The biBitCount member of the BITMAPINFOHEADER structure determines the number
    of bits which define each pixel and the maximum number of colors in the
    bitmap. This member may be set to any of the following values:

    Value Meaning

    1 The bitmap is monochrome, and the bmciColors member must contain two
    entries. Each bit in the bitmap array represents a pixel. If the bit is
    clear, the pixel is displayed with the color of the first entry in the
    bmciColors table. If the bit is set, the pixel has the color of the second
    entry in the table.

    4 The bitmap has a maximum of 16 colors, and the bmciColors member
    contains 16 entries. Each pixel in the bitmap is represented by a four-bit
    index into the color table.

    For example, if the first byte in the bitmap is 0x1F, the byte represents two
    pixels. The first pixel contains the color in the second table entry, and the
    second pixel contains the color in the sixteenth table entry.

    8 The bitmap has a maximum of 256 colors, and the bmciColors member
    contains 256 entries. In this case, each byte in the array represents a
    single pixel.

    24 The bitmap has a maximum of 2^24 colors. The bmciColors member is
    NULL, and each 3-byte sequence in the bitmap array represents the relative
    intensities of red, green, and blue, respectively, of a pixel.

    The biClrUsed member of the BITMAPINFOHEADER structure specifies the number
    of color indexes in the color table actually used by the bitmap. If the
    biClrUsed member is set to zero, the bitmap uses the maximum number of colors
    corresponding to the value of the biBitCount member.

    The colors in the bmiColors table should appear in order of importance.
    Alternatively, for functions that use DIBs, the bmiColors member can be an
    array of 16-bit unsigned integers that specify an index into the currently
    realized logical palette instead of explicit RGB values. In this case, an
    application using the bitmap must call DIB functions with the wUsage
    parameter set to DIB_PAL_COLORS.

    Note: The bmiColors member should not contain palette indexes if the bitmap
    is to be stored in a file or transferred to another application. Unless the
    application uses the bitmap exclusively and under its complete control, the
    bitmap color table should contain explicit RGB values.




  3. #3
    Join Date
    Sep 1999
    Location
    Istanbul
    Posts
    85

    Re: How to determine if a BMP file is monochrome, grayscale, index color or rgb color

    ...

    typedef struct tagBITMAPINFOHEADER { /* bmih */
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
    } BITMAPINFOHEADER;


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured