TFAlphaBlend 用于透明度计算函数 汇编代码
来源:互联网 发布:数据分析工程师 编辑:程序博客网 时间:2024/05/16 16:14
虽然操作系统提供了一个名为 AlphaBlend的API函数,实现了DC之间的ALPHA效果。
但我的程序中并不需要对DC进行操作,只需要对指定颜色数组进行ALPHA计算并存回数组后,再存回文件。
因此,在网上查了下图像透明度的算法,按网上算法果然好用,不过数据点过多的时候效率稍低一些,所以抽时间写了段汇编代码来实现Alpha功能,并在此与大家分享,愿我的代码能对大家有所帮助,由于我的汇编水平属菜鸟级别,更希望高手帮忙优化代码,提高运行效率。
此代码在VC6.0下编译通过
// DstColor 目标颜色数组,函数返回后,存储经过ALPHA计算的颜色数组
// SrcColor 源颜色数组
// Alpha 透明度 0-255
// Count 颜色数组长度
void TFAlphaBlend(COLORREF* DstColor, COLORREF* SrcColor, BYTE Alpha, DWORD Count)
{
__asm
{
//将要用到的寄存器入栈
push ebx
push ecx
push edx
push esi
push edi
//处理参数
mov esi, SrcColor
mov edi, DstColor
mov ecx, Count
mov bl, Alpha
sub esi, 4
sub edi, 4
mov al, 255
sub al, bl
mov bh, al
//进入ALPHA计算
ABlend_LOOP1:
//计算红色分量
mov eax, [esi+ecx*4]
mul bl
mov dx, ax
mov eax, [edi+ecx*4]
mul bh
add eax, edx
shr eax, 8
//将红色分量结果写回DstColor[ecx]
mov byte ptr [edi+ecx*4], al
//计算绿色分量
mov eax, [esi+ecx*4]
shr eax, 8
mul bl
mov dx, ax
mov eax, [edi+ecx*4]
shr eax, 8
mul bh
add eax, edx
shr eax, 8
//将绿色分量结果写回DstColor[ecx]
mov byte ptr [edi+ecx*4]+1, al
//计算蓝色分量
mov eax, [esi+ecx*4]
shr eax, 16
mul bl
mov dx, ax
mov eax, [edi+ecx*4]
shr eax, 16
mul bh
add eax, edx
shr eax, 8
//将蓝色分量结果写回DstColor[ecx]
mov byte ptr [edi+ecx*4]+2, al
LOOP ABlend_LOOP1
//计算结束,出栈
pop edi
pop esi
pop edx
pop ecx
pop ebx
}
}
- TFAlphaBlend 用于透明度计算函数 汇编代码
- 透明度计算
- eval函数用于计算代码串,而不引用任何特定
- sas用于金融计算的函数
- main函数的汇编代码
- 汇编代码 调用函数过程
- 函数调用汇编代码分析
- 虚函数调用 汇编代码
- android 透明度计算
- 颜色透明度计算
- Android 颜色透明度计算
- android 透明度计算
- 颜色透明度计算
- Android透明度计算
- Android 颜色透明度计算
- hash值计算函数用于中文字符的错误纠正
- c程序主函数的汇编代码
- VC 函数调用的 汇编代码 浅析
- 串链基本操作的实现
- MP3转换器下载 - 通用mp3转换器
- 如果你是作为一个男人,尤其作为一个真正的爷们,应该做好下列小事
- 7.4.1普通枚举
- 7.4.2 带构造参数的枚举
- TFAlphaBlend 用于透明度计算函数 汇编代码
- 数学建模十大经典算法漫谈
- 7.4.3 带抽像方法的枚举
- php视频教程打包下载 - 网络上最好的php视频教程
- 1-优化缓存
- 7.5注解
- 7.5.1注解的定义与反射的调用
- 7.5.2 为注解增加各种属性
- test