windows鼠标指针有如下几种数据格式
- COLOR彩色类型
该模式为具有alpha通道的标准32位彩色图像,直接使用alpha通道进行颜色图像混合
即dstColor = srcColor * (1 - alpha) + cursorColor * alpha得出目标图像
- MONOCHROME单色蒙板类型
指针类型是单色鼠标指针,它是单色位图。位图的大小为指针相同宽度,指针高度x2,它会得到一个掩码和一个异或掩码组合成一组掩码数据。
每一bit数据对应一像素,一行数据为指针像素宽度个数bit,异或掩码与掩码相差像素高度个数*宽度bit数。
例,如鼠标指针为像素32*32,则该蒙板大小为32*64,每一行掩码数据为32bit即4byte,当掩码为0时则异或掩码为0 + 32(即蒙板高度/2) * 4
最终图像需要先做AndMask掩码运算再做XorMask异或掩码运算
如果AndMask为1时,则srcColor = srcColor & (AndMask ? 0xFFFFFFFF : 0xFF000000)
如果XorMask为1时,则srcColor = srcColor ^ (XorMask ? 0x00FFFFFF : 0x00000000)
所以最终图像结果为srcColor = (srcColor & (AndMask ? 0xFFFFFFFF : 0xFF000000)) ^ (XorMask ? 0x00FFFFFF : 0x00000000)
- MASKED_COLOR彩色蒙版类型
该模式中使用alpha位的mask值来设置,当该位为0xFF则使目标颜色与指针颜色做异或操作,否则为0x00时直接使用指针颜色
即dstColor = (mask == 0xFF ? (srcColor ^ cursorColor) : cursorColor)