pablo1977
pablo1977

Reputation: 4433

How is defined the data type FXPT2DOT30 in the BMP file structure?

The type FXPT2DOT30 appears in defining the struct CIEXYZ for BMP files, according to the definition provided by Microsoft:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd371828(v=vs.85).aspx

However, I cannot found the exact definition of FXPT2DOT30 anywhere. Which is its precise definition? What kind of data is supposed to hold?

Upvotes: 3

Views: 1935

Answers (3)

Vurdalakov
Vurdalakov

Reputation: 109

From gdiplus.h:

typedef long FXPT2DOT30, FAR *LPFXPT2DOT30;

typedef struct tagCIEXYZ
{
        FXPT2DOT30 ciexyzX;
        FXPT2DOT30 ciexyzY;
        FXPT2DOT30 ciexyzZ;
} CIEXYZ;

Upvotes: 0

paleozogt
paleozogt

Reputation: 6563

According to fileformat.info here is an unpacked version of the BITMAPV4HEADER structure. The fields between CSType and GammaRed correspond to the CIEXYZTRIPLE bV4Endpoints in BITMAPV4HEADER.

typedef struct _Win4xBitmapHeader
{
    DWORD Size;            /* Size of this header in bytes */
    LONG  Width;           /* Image width in pixels */
    LONG  Height;          /* Image height in pixels */
    WORD  Planes;          /* Number of color planes */
    WORD  BitsPerPixel;    /* Number of bits per pixel */
    DWORD Compression;     /* Compression methods used */
    DWORD SizeOfBitmap;    /* Size of bitmap in bytes */
    LONG  HorzResolution;  /* Horizontal resolution in pixels per meter */
    LONG  VertResolution;  /* Vertical resolution in pixels per meter */
    DWORD ColorsUsed;      /* Number of colors in the image */
    DWORD ColorsImportant; /* Minimum number of important colors */
    /* Fields added for Windows 4.x follow this line */

    DWORD RedMask;       /* Mask identifying bits of red component */
    DWORD GreenMask;     /* Mask identifying bits of green component */
    DWORD BlueMask;      /* Mask identifying bits of blue component */
    DWORD AlphaMask;     /* Mask identifying bits of alpha component */
    DWORD CSType;        /* Color space type */
    LONG  RedX;          /* X coordinate of red endpoint */
    LONG  RedY;          /* Y coordinate of red endpoint */
    LONG  RedZ;          /* Z coordinate of red endpoint */
    LONG  GreenX;        /* X coordinate of green endpoint */
    LONG  GreenY;        /* Y coordinate of green endpoint */
    LONG  GreenZ;        /* Z coordinate of green endpoint */
    LONG  BlueX;         /* X coordinate of blue endpoint */
    LONG  BlueY;         /* Y coordinate of blue endpoint */
    LONG  BlueZ;         /* Z coordinate of blue endpoint */
    DWORD GammaRed;      /* Gamma red coordinate scale value */
    DWORD GammaGreen;    /* Gamma green coordinate scale value */
    DWORD GammaBlue;     /* Gamma blue coordinate scale value */
} WIN4XBITMAPHEADER;

Upvotes: 2

pablo1977
pablo1977

Reputation: 4433

@RobinGreen provided a link:

There it is the answer to my question:

[...] FXPT2DOT30 [...] which means that they are interpreted as fixed-point values with a 2-bit integer part and a 30-bit fractional part.

Upvotes: 8

Related Questions