StupidBeauty
Read times:1399Posted at:Wed Dec 28 05:30:41 2011
- no title specified

QColor中的pad

在Qt4.7.4中,QDataStream对一個QColor进行序列化时,會输出6個东西:spec、alpha、red、green、blue、pad。本座今天读到文档中的这一段时,很不理解pad是個什么东西。在问过境外论坛的人,并且读过QColor的代码之后,终于知道咯,pad在代码里只是用来占用内存位置的,当妳使用RGB模式来表示颜色时,pad无意义。

QColor同时支持RGB、HSV、CMYK、HSL四种颜色规范,以这四种规范来表示颜色所需要的数据大小是不同的。而无论是采用哪种规范,在QColor内部都是把数据存储在一個联合体里的。QColor内部对颜色数据的定义是union ct,具体是这样的:

union {

struct {

ushort alpha;

ushort red;

ushort green;

ushort blue;

ushort pad ;

} argb ;

struct {

ushort alpha;

ushort hue;

ushort saturation;

ushort value;

ushort pad ;

} ahsv ;

struct {

ushort alpha;

ushort cyan;

ushort magenta;

ushort yellow;

ushort black;

} acmyk ;

struct {

ushort alpha;

ushort hue;

ushort saturation;

ushort lightness;

ushort pad ;

} ahsl ;

ushort array [ 5 ];

} ct ;

可以看到,CMYK模式实际上要多占用一個ushort的长度。由于这几個对应于不同规范的结构体是共存于一個联合体里的,为咯让它们长度相等,就把另外三個结构体的末尾都填充上一個ushort,这块填充内存就叫做pad。

从这個代码也可以看到,QDataStream在序列化的时候既输出alpha、red、green、blue,也输出pad是必要的。因为在这個时候输出的其实是整个结构体,是不能把它们分开当作“透明”“红”“绿”“蓝”“填充”来看的。这個结构体究竟解释成什么,取决于前面输出的spec。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands