We'll use this for the blend function
fGrad proc x:dword,nMaxx:dword,nNum:dword
xor edx,edx ; 1
mov eax,nNum ; 2
mul x ; 42
div nMaxx ; 40
; 85 clock cycle
ret
fGrad endp
BlendPixel proc uses esi edi pixel:dword, pixel2:dword,percent:dword
LOCAL r,g,b:dword
LOCAL r2,g2,b2:dword
LOCAL c1,c2:dword
LOCAL rat:Dword
mov edx,pixel
mov eax,pixel2
bswap edx
bswap eax
mov c1,edx
mov c2,eax
lea esi,c1
lea edi,c2
movzx eax,byte ptr[esi+3]
mov r,eax
movzx eax,byte ptr[esi+2]
mov g,eax
movzx eax,byte ptr[esi+1]
mov b,eax
movzx eax,byte ptr[edi+3]
mov r2,eax
movzx eax,byte ptr[edi+2]
mov g2,eax
movzx eax,byte ptr[edi+1]
mov b2,eax
mov ecx,100
sub ecx,percent
mov rat,ecx
invoke fGrad,rat,100,r
mov r,eax
invoke fGrad,rat,100,g
mov g,eax
invoke fGrad,rat,100,b
mov b,eax
invoke fGrad,percent,100,r2
mov r2,eax
invoke fGrad,percent,100,g2
mov g2,eax
invoke fGrad,percent,100,b2
mov b2,eax
mov eax,r
add r2,eax
mov eax,g
add g2,eax
mov eax,b
add b2,eax
; shr r2,1
; shr g2,1
; shr b2,1
mov eax,b2
shl eax,8
or eax,g2
shl eax,8
or eax,r2
ret
BlendPixel endp
MMX version is coming soon