关于一些透明窗体所需的的函数
2013-08-11 15:47
323 查看
效果图:
白云顠顠。。
1.DIB32位, 预乘alpha
2. Alpha 混合,针对DIB32数据
3. DIB32数据的部分拷贝
白云顠顠。。
1.DIB32位, 预乘alpha
proc AlphaPreMul uses ebx edi, pBitDst,pDstRect,dwDstWight local dwWight:DWORD,dwHight:DWORD ;--------------------------------------- mov edi,[pBitDst] mov edx,[pDstRect] ;(p,q) mov eax,[edx+RECT.right] test eax,eax jz .exit mov [dwWight],eax mov eax,[edx+RECT.bottom] test eax,eax jz .exit mov [dwHight],eax mov eax,[dwDstWight] ; shl eax,2 mov ecx,[edx+RECT.top] imul eax,ecx mov ecx,[edx+RECT.left] lea eax,[eax+ecx*4] add edi,eax ;pDstData start ;--------------------------------------- .loopy: mov ebx,[dwWight] push edi .loopx: mov cl,[edi+3] ;alpha mov al,[edi] mul cl ;ax=al*cl mov [edi],ah mov al,[edi+1] mul cl ;ax=al*cl mov [edi+1],ah mov al,[edi+2] mul cl ;ax=al*cl mov [edi+2],ah add edi,4 sub ebx,1 jnz .loopx pop edi add edi,[dwDstWight] sub [dwHight],1 jnz .loopy .exit: ret endp
2. Alpha 混合,针对DIB32数据
proc AlphaBlend32 uses ebx esi edi, pBitDst,pDstRect,dwDstWight,pBitSrc,pSrcPoint,dwSrcWight local dwWight:DWORD,dwHight:DWORD mov esi,[pBitSrc] mov edx,[pSrcPoint] ;(p,q) mov eax,[dwSrcWight] ; shl eax,2 mov ecx,[edx+POINT.y] imul eax,ecx mov ecx,[edx+POINT.x] lea eax,[eax+ecx*4] add esi,eax ;pSrcData start ;--------------------------------------- mov edi,[pBitDst] mov edx,[pDstRect] ;(p,q) mov eax,[edx+RECT.right] test eax,eax jz .exit mov [dwWight],eax mov eax,[edx+RECT.bottom] test eax,eax jz .exit mov [dwHight],eax mov eax,[dwDstWight] ; shl eax,2 mov ecx,[edx+RECT.top] imul eax,ecx mov ecx,[edx+RECT.left] lea eax,[eax+ecx*4] add edi,eax ;pDstData start ;--------------------------------------- .loopy: mov ebx,[dwWight] push edi push esi .loopx: mov cl,255 mov dl,255 sub cl,[esi+3] mov al,[edi] mul cl ;ax=al*cl ; add ax,128 ; div dl ;al=ax/dl add ah,[esi] mov [edi],ah mov al,[edi+1] mul cl ;ax=al*cl ; add ax,128 ; div dl ;al=ax/dl add ah,[esi+1] mov [edi+1],ah mov al,[edi+2] mul cl ;ax=al*cl ; add ax,128 ; div dl ;al=ax/dl add ah,[esi+2] mov [edi+2],ah mov al,[edi+3] mul cl ;ax=al*cl ; add ax,128 ; div dl ;al=ax/dl add ah,[esi+3] mov [edi+3],ah add esi,4 add edi,4 sub ebx,1 jnz .loopx pop esi pop edi add esi,[dwSrcWight] add edi,[dwDstWight] sub [dwHight],1 jnz .loopy .exit: ret endp
3. DIB32数据的部分拷贝
proc Dib32Copy uses esi edi, pBitDst,pDstRect,dwDstWight,pBitSrc,pSrcPoint,dwSrcWight local dwWight:DWORD,dwHight:DWORD mov esi,[pBitSrc] mov edx,[pSrcPoint] ;(p,q) mov eax,[dwSrcWight] ; shl eax,2 mov ecx,[edx+POINT.y] imul eax,ecx mov ecx,[edx+POINT.x] lea eax,[eax+ecx*4] add esi,eax ;pSrcData start ;--------------------------------------- mov edi,[pBitDst] mov edx,[pDstRect] ;(p,q) mov eax,[edx+RECT.right] test eax,eax jz .exit shl eax,2 mov [dwWight],eax mov eax,[edx+RECT.bottom] test eax,eax jz .exit mov [dwHight],eax mov eax,[dwDstWight] ; shl eax,2 mov ecx,[edx+RECT.top] imul eax,ecx mov ecx,[edx+RECT.left] lea eax,[eax+ecx*4] add edi,eax ;pDstData start ;--------------------------------------- .loopy: invoke RtlMoveMemory,edi,esi,[dwWight] add esi,[dwSrcWight] add edi,[dwDstWight] sub [dwHight],1 jnz .loopy .exit: ret endp
相关文章推荐
- javascript 一些关于css操作的函数
- 关于C语言中 rand()函数的一些个人积累和见解z
- 关于宏和函数、内联函数的一些区别
- C++中关于string的一些函数的问题
- 关于指针作为函数参数的一些想法
- 关于.net中获取图像缩略图的函数GetThumbnailImage的一些认识。
- 《学习opencv》笔记——关于一些绘图的函数
- 关于如何提取代码成为函数,自己浅薄的一些看法
- iOS 关于navigationBar的一些:毛玻璃、透明、动态缩放、动态隐藏
- STL -- 关于一些字符串处理用到的函数和数据结构
- 关于导航栏透明和渐变的一些设置
- 关于C#窗体的半透明,控件不透明的解决方案
- 关于count()函数一些问题
- 关于字符函数的一些应用总结
- 关于函数和字符指针的一些看法。
- 关于字符串操作的一些函数简单说明与应用
- 关于Java Swing中的透明窗体
- perl中关于字符串的一些函数
- 项目总结之关于JQuery一些常用的函数