关于一些透明窗体所需的的函数
来源:互联网 发布:局域网控制电脑软件 编辑:程序博客网 时间:2024/06/05 23:46
效果图:
白云顠顠。。
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: retendp
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: retendp
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: retendp
- 关于一些透明窗体所需的的函数
- 关于窗体透明的做法
- 关于窗体透明的注意事项
- 关于窗体透明的做法
- 透明窗体的实现
- 透明的WinForm窗体
- 透明窗体的实现
- 透明窗体的实现
- 实时的透明窗体
- 透明窗体的编写
- 文件透明加密,所处理的一些API
- 关于透明窗口的一些收集
- 关于截屏实现透明窗体的bug
- 透明窗体的又一实现
- 另类的实现透明窗体
- [转载] 透明窗体的实现
- VC透明窗体的实现
- VC透明窗体的实现
- HDU1215---七夕节 HDU(91)
- UINavigationController使用详解
- HDU2578——Dating with girls
- 怎么安装MYSQL5.0的JDBC驱动
- 扩展欧几里得算法&同余方程&模m乘法逆元详解
- 关于一些透明窗体所需的的函数
- 将双系统中的ubuntu删除以后出现no such partition grub rescue的解决方案
- Eclipse搭配开发Jsp开发环境
- UI界面类项目:非UI界面类:(第三方)
- extjs4 中使用google地图api
- 如何解决java.library.path属性在代码中设置不生效问题
- IOS开发中常用到的宏定义
- hdu1501
- Linux grep命令