BMP文件结构中数据类型FXPT2DOT30是如何定义的?

Posted

技术标签:

【中文标题】BMP文件结构中数据类型FXPT2DOT30是如何定义的?【英文标题】:How is defined the data type FXPT2DOT30 in the BMP file structure? 【发布时间】:2014-01-01 01:13:03 【问题描述】:

类型 FXPT2DOT30 出现在为 BMP 文件定义 struct CIEXYZ 时, 根据微软提供的定义:

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

但是,我无法在任何地方找到 FXPT2DOT30 的确切定义。 它的准确定义是什么? 应该保存什么样的数据?

【问题讨论】:

此问题已回答here @RobinGreen 非常感谢 【参考方案1】:

@RobinGreen 提供了一个link:

这就是我的问题的答案:

[...] FXPT2DOT30 [...] 这意味着它们被解释为具有 2 位整数部分和 30 位小数部分的定点值。

【讨论】:

【参考方案2】:

根据fileformat.info,这里是BITMAPV4HEADER 结构的解压版本。 CSTypeGammaRed之间的字段对应BITMAPV4HEADER中的CIEXYZTRIPLE bV4Endpoints

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;

【讨论】:

【参考方案3】:

来自gdiplus.h

typedef long FXPT2DOT30, FAR *LPFXPT2DOT30;

typedef struct tagCIEXYZ

        FXPT2DOT30 ciexyzX;
        FXPT2DOT30 ciexyzY;
        FXPT2DOT30 ciexyzZ;
 CIEXYZ;

【讨论】:

以上是关于BMP文件结构中数据类型FXPT2DOT30是如何定义的?的主要内容,如果未能解决你的问题,请参考以下文章

BMP文件结构(转)

用标准c读取bmp文件的长宽?

C++如何把位图保存到数组中

BMP 图像信息隐藏及检测

文件类型

如何查询blob类型中存的是啥格式的文件