您的位置:首页 > 其它

为Symbian程序中的图片增加半透明效果

2008-01-03 09:28 281 查看
我封装了一个方法,传入相应的图片,就会把图片变成半透明效果并显示在程序界面上.
void CMegajoyContainer::ConvertToAlpha(CWindowGc& gc,CFbsBitmap *imgToBrighten) const
 {
  CFbsBitmap* iEmptyBitmap = new ( ELeave ) CFbsBitmap();
  CleanupStack::PushL( iEmptyBitmap );
  User::LeaveIfError( iEmptyBitmap->Create( imgToBrighten->SizeInPixels(), CEikonEnv::Static()->DefaultDisplayMode() ) );
  CFbsBitmapDevice *iGD = CFbsBitmapDevice::NewL( iEmptyBitmap );
  CleanupStack::PushL( iGD );
  CFbsBitGc *iGC;
  User::LeaveIfError( iGD->CreateContext( iGC ) );
  iGC->SetPenStyle( CGraphicsContext::ENullPen );
  iGC->SetBrushColor( KRgbWhite );
  iGC->SetBrushStyle( CGraphicsContext::ESolidBrush );
  iGC->DrawRect( TRect(TPoint(0,0), iEmptyBitmap->SizeInPixels()) );
  iGC->SetBrushStyle( CGraphicsContext::ENullBrush );
  delete iGC;
  CleanupStack::PopAndDestroy( iGD );
  CFbsBitmap* iEmptyBitmapMask = new ( ELeave ) CFbsBitmap();
  CleanupStack::PushL( iEmptyBitmapMask );
  User::LeaveIfError( iEmptyBitmapMask->Create( imgToBrighten->SizeInPixels(), EGray256 ) );
  iGD = CFbsBitmapDevice::NewL( iEmptyBitmapMask );
  CleanupStack::PushL( iGD );
  User::LeaveIfError( iGD->CreateContext( iGC ) );
  iGC->SetPenStyle( CGraphicsContext::ENullPen );
  iGC->SetBrushColor( KRgbGray );
  iGC->SetBrushStyle( CGraphicsContext::ESolidBrush );
  iGC->DrawRect( TRect(TPoint(0,0), iEmptyBitmap->SizeInPixels()) );
  iGC->SetBrushStyle( CGraphicsContext::ENullBrush );
  delete iGC;
  CleanupStack::PopAndDestroy( iGD );
  gc.BitBltMasked(TPoint(0,0),iEmptyBitmap,TRect(TPoint(0,0),iEmptyBitmapMask->SizeInPixels()),iEmptyBitmapMask,EFalse);
  CleanupStack::PopAndDestroy(iEmptyBitmapMask);
  CleanupStack::PopAndDestroy( iEmptyBitmap );
 } 
注意要在.mmp文件中加入库文件
LIBRARY bitgdi.lib
LIBRARY ws32.lib
LIBRARY fbscli.lib
 
效果如下:
原图片为



转变后的图片为



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1465656
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: