在WINCE中,经常要用到透明的位图,而且不同的地方透明度也不一样,这就需要调节透明度了,我在最近几天才发现这个方法。拿出来共享,而且很适合做图片的透明渐进。
//******************************************************************
//图片从透明到不透明渐进显示
//******************************************************************
void Ddraw_AlphaBlend(HWND hWnd,DWORD PicID)
{
BLENDFUNCTION blendfuction;
RECT rect = {0,0,480,272};
BYTE CurrentAlpha = 150;
blendfuction.BlendOp = AC_SRC_OVER;
blendfuction.BlendFlags = 0;
blendfuction.AlphaFormat = 0;
HDC hdcDest,hdcSrc;
HBITMAP hBmp;
hdcDest = GetDC(hWnd);
hdcSrc = CreateCompatibleDC(hdcDest);
hBmp = LoadBitmap(hInst,MAKEINTRESOURCE(PicID));
HGDIOBJ hOldSel = SelectObject(hdcSrc,hBmp);
BITMAP bmp;
GetObject(hBmp,sizeof(BITMAP),&bmp);
blendfuction.SourceConstantAlpha = CurrentAlpha; //当前透明度 0~255
if(!AlphaBlend(hdcDest,129,188,bmp.bmWidth, bmp.bmHeight,hdcSrc,0,0,bmp.bmWidth,bmp.bmHeight,blendfuction))
{
MessageBox(hWnd,TEXT("Error"),TEXT("err"),MB_OK);
}
SelectObject(hdcSrc,hOldSel);
DeleteObject(hdcSrc);
DeleteDC(hdcDest);
}
如果在做一个图片从全透明到全不透明的一个渐进教程,只需要做个循环改变CurrentAlpha的值,即可。
注意,此方法需要OS的支持,要在OS中添加一个硬件加速的组件和DIRECTDRAW.
特殊界面对BSP的修改及应用程序相关设置
1.需要使用到透明混合处理API(Alphablend)时,需要添加Alphablend API(属于GDI)。路径如下:
CORE OS/graphics and Multimedia technologies/graphics/Alphablend API(GDI V)
2.需要使用DirectDraw编程时所需要添加的组件:DirectDraw,路径如下:
CORE OS/graphics and Multimedia technologies/graphics/ DirectDraw
3.使用DirectDraw编写应用程序时,在应用程序中需要添加如下相应的静态库和相关头文件.
ddraw.lib <ddraw.h>
4.需要使用到stream或buffer来直接解码图片文件,比如GIF,PNG等格式的图片,需要添加以下静态库和头文件,具体解码过程在另一文档有详细介绍。
Imaging.lib
commctrl.lib
coredll.lib
#include "initguid.h"
#include "imaging.h"
#pragma comment (lib,"Ole32.lib")
(落鹤生) |