mmx的32位alpha混合

本文介绍了如何利用MMX指令进行32位像素格式的alpha混合操作,通过一系列寄存器操作和指令实现半透明效果,并最终将混合结果写回目的像素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

碰到个古老的问题,像素的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;
; 混合结果写回目的像素

转载于:https://www.cnblogs.com/hj046/archive/2011/11/02/2233682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值