首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

怎么实现PNG 在mobile 6.0上透明呢

2012-01-16 
如何实现PNG 在mobile 6.0上透明呢?找好了好长时间,不得其法.gdiplus在pc很好,移到mobile上没有效果.有哪

如何实现PNG 在mobile 6.0上透明呢?
找好了好长时间,不得其法.
gdiplus在pc很好,移到mobile上没有效果.
有哪位兄弟做过,高分伺候.
是C++.
网络上太多C#的实现,自己看不太明白,如果哪位知道从C#转到C++,也麻烦告知一二

[解决办法]
呵呵,这个不好办啊~~
你可以把内存整出来自己画,可以用png解析器把内存搞出来,再alpha混合再贴回去。
另外一种方法,试试用IImage,这个能解决就是速度慢。
[解决办法]
一定要png弄透明吗?不是png的话很好弄。
用AlphaBlend这个函数来实现。
http://msdn.microsoft.com/en-us/library/aa920812.aspx

C#的话,参考一下这个例子:
http://www.codeproject.com/KB/mobile/IPhoneUI.aspx?fid=1532333&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=3060077
[解决办法]
如果只是针对png图片的话,最好png本身做的时候就是半透明的,这样利用IImagingFactory,IImage接口就可以实现半透明的效果,否则通用的方法就是用AlphaBlend的方法实现半透明效果。
[解决办法]
sdk自带例子:\Windows Mobile 6 SDK\Samples\Common\CPP\Win32\Imaging
[解决办法]
那个例子是加载可以加载png图片,如果你的png图片本身是半透明的,显示的效果就是半透明的,否则只能用AlphaBlend实现。
[解决办法]
参考:
hBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE (IDB_BITMAP6));//这里可以用其他方法加载其他格式的图片,如SHLoadImageFile
hdcMem = CreateCompatibleDC(hDC);
SelectObject(hdcMem,hBitmap); 
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0 ;
bf.SourceConstantAlpha = 170;
bf.AlphaFormat = 0;
AlphaBlend(hDC, x, y, width, height, hdcMem , 0, 0, width, height, bf);
[解决办法]

探讨
引用:
参考:
hBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE (IDB_BITMAP6));//这里可以用其他方法加载其他格式的图片,如SHLoadImageFile
hdcMem = CreateCompatibleDC(hDC);
SelectObject(hdcMem,hBitmap);
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0 ;
bf.SourceConstantAlpha = 170;
bf.AlphaFormat = 0;
AlphaBlend(hDC, x, y, width, height, hdcMem , 0, 0, width, height, bf); …

[解决办法]
IMAGE和IMAGEFACTORY是正解。
[解决办法]
wm5.0sdk以后的话,就用AlphaBlend可以实现透明。

或者,你直接加载一个透明图片也可以的。

IMAGEINGFACTORY这个应该更方便吧,不过这个我没有用,上面2个方法我都试过,可以的。

LZ可以写测试程序试试。。。。
[解决办法]
用WMGL试试吧,一个国外的画图库. 速度还行
http://www.mobilityflow.com/products/wmgl/
WMGL is the Graphic Library developed for Windows Mobile devices. It provides easy-in-use interfaces for fast alpha blending and various 3D effects.
[解决办法]
探讨
我现在的做法是把背景叠加进去,假透明,效率还很低,没办法了.

[解决办法]
探讨
参考:
hBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE (IDB_BITMAP6));//这里可以用其他方法加载其他格式的图片,如SHLoadImageFile
hdcMem = CreateCompatibleDC(hDC);
SelectObject(hdcMem,hBitmap);
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0 ;
bf.SourceConstantAlpha = 170;
bf.AlphaFormat = 0;
AlphaBlend(hDC, x, y, width, height, h…

[解决办法]
LoadBitMap是无法实现透明的,你只能用com来做
IImagingFactory
IImage
通过com的方式加载png,draw.这个我在mobile6下是没问题的

热点排行