CURSOR 文件格式解析

 

CURSOR 文件格式解析

 

  Cursor文件是Windows专用的光标文件。Cursor格式是比较简单的,没有做压缩,在cursor文件中都是存在调色板的。

 

光标目录:

Cursor的文件头存放着光标目录(Cursor Directory), 他的数据段如下

 

Field name

Field type

Size (bits)

保留(Reserved

WORD

16

类型 (Type)

WORD

16

光标个数(count)

WORD

16

光标目录信息

BYTE

不定

 

window 中,我们可以成如下结构

typedef struct _cursordir

{

     WORD cdreserved;

     WORD cdtype;

     WORD cdcount;

} CURSORDIR;

各数据段的定义

保留(Reserved):该字段保留,必须为0

类型 (Type):光标资源类型,必须为2

光标个数(count):指定光标文件中,光标的个数。微软的程序通常不根据不同的情境,使用其中的一个。这种情况在ICON中很常见。

光标目录信息:根据光标个数,有个光标都有自己的光标目录信息。

 

光标目录信息:

光标目录信息存放在光标目录之后。他的数据段如下

 

Field name

Field type

Size (bits)

宽度(Width

BYTE

8

高度 (Height)

BYTE

8

颜色数(ColorCount)

BYTE

8

保留

BYTE

8

X坐标热点(x hotspot

WORD

16

Y坐标热点(y hotspot)

WORD

16

数据大小(byte size)

DWORD

32

数据偏移量(image offset)

DWORD

32

window 中,我们可以成如下结构

typedef struct _cursordirentry

{

     BYTE bwidth;

     BYTE bheight;

     BYTE bcolorcount;

     BYTE breserved;

     WORD wxhotspot;

     WORD wyhotspot;

     DWORD lbytesinres;

     DWORD dwimageoffset;

} CURSORDIRENTRY;

 

宽度(Width):指定光标宽度

高度 (Height):指定光标高度

颜色数(ColorCount):保留字段,必须为0

保留:保留字段,必须为0

X坐标热点(x hotspot):指定光标热点区的X左标

Y坐标热点(y hotspot) :指定光标热点区的Y左标

数据大小(byte size):指定该光标图像的大小

数据偏移量(image offset):指定该光标图像的偏移量,偏移量是从文件头开始计算的。

 

当光标文件中存在多个光标时,就会有多份的光标目录信息。根据每个光标目录信息去读取光标图像。

 

光标图像:

每个光标图像数据,右四部分数据构成,其字段如下:

 

Field name

Field type

Size (bits)

位图信息头(bitmap header info

BITMAPINFOHEADER

40

调色板 ( palette  )

RGBQUAD

不定

XOR颜色数据(Color XOR)

BYTE

不定

AND数据(Color AND

BYTE

不定

 

位图信息头(bitmap header info: 指定图片信息,其中只有biBitCountbiSizeImage有效,biHeightXORAND数据高度之和。biPlanes1,其他为0

调色板 ( palette  ):调色板信息,调色板的大小是2biBitCount次方,即1<<biBitCount

XOR颜色数据:每个pixel占用bitBitCout位。其信息是对应调色板中的索引值

AND数据:每个pixel占用一个bit,指定是否透明,1透明,0不透明。

XOR颜色数据的大小是bwidth * bheight * biBitCount/8, 画图的时候要根据每个像素信息从调色板中取颜色值。再根据AND数据,判断是否透明

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值