symbian实现透明办法

一、前言
    中午研究了下在symbian中实现图片透明效果方法。现将方法分享下

二、实现方法
    1、首先 制作一张 mask图。
      2、再调用BitBltMasked()这个函数画出来

三、实现
     1、 制作mask图的函数如下
          //参数说明:pBitmap是原位图,iAlpha是透明的指数(0~255)
          CFbsBitmap * CMainFrame::CreatMaskImageL(CFbsBitmap *pBitmap, TInt iAlpha)
{
ASSERT(pBitmap != NULL);
CFbsBitmap *ImageMask = new (ELeave) CFbsBitmap();
ImageMask->Create(pBitmap->SizeInPixels(), EGray256);
CFbsDevice *iBitmapDevice = CFbsBitmapDevice::NewL(ImageMask);
CBitmapContext * iBitmapGc;
iBitmapDevice->CreateBitmapContext(iBitmapGc);
iBitmapGc->Clear(TRect(TPoint(0, 0), pBitmap->SizeInPixels()));
iBitmapGc->SetPenStyle(CGraphicsContext::ENullPen);
iBitmapGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
/*
这个参数就是一个透明度了的设置了,参数大小是0~255。这里不好说是0是透明还是255是透明,因为          这个需要
根据你使用的BitBltmask这个函数的最后一个参数定(具体意思看sdk)。如果是设置为ETrue那么0是          完全透明
255是完全不透明,反正如果设置为EFalse,那么255是完全透明。这里可以再程序中动态的改变其透明          度来达到
透明效果动态变化的效果。
*/
iBitmapGc->SetBrushColor(TRgb::Gray256(iAlpha));
iBitmapGc->DrawRect(ImageMask->SizeInPixels());
delete iBitmapDevice;
delete iBitmapGc;
return ImageMask;
}

      2、调用画图API画出来
         CFbsBitmap *pBitmapMask = CreatMaskImageL(pBitmap, 220);
 aGc.BitBltMasked(TPoint(0, 0), pBitmap, pBitmap->SizeInPixels(), pBitmapMask, ETrue);

 四、小结
     这个方法比较通用,听说在symbian 3rd有更简洁的方法。不过为了可移植性,这种方法好一点!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值