mmx的32位alpha混合

碰到个古老的问题,像素的alpha混合,于是查阅了mmx指令,写出了如下32位像素格式的alpha混合,不过alpha值固定为半透明,代码效率还能接受。如下:

mov eax, dest;
;dest是目的像素指针
movd mm0, [eax];
; 把目的像素值移入mm0寄存器的低32位
movd mm1, color;
; 把源像素值移入mm1寄存器的低32位
pxor mm2, mm2;
; mm2寄存器置零
pxor mm3, mm3;
; mm3寄存器置零
punpcklbw mm0, mm2;
; 目的像素值RGB各分量从1byte扩展成2byte
punpcklbw mm1, mm3;
;源像素值RGB各分量从1byte扩展成2byte
paddsw mm0, mm1;
; 源像素和目的像素每个2byte分量相加,结果存放在mm0寄存器
psrlw mm0, 1;
; 各分量除以2
packuswb mm0, mm1;
; 每个2byte分量再压缩成1byte,混合结果存储在mm0的低32位,mm0高32位为无效值
movd [eax], mm0;
; 混合结果写回目的像素

posted @ 2011-11-02 22:35  火月  阅读(559)  评论(0编辑  收藏  举报