透明前
透明后
实现方法:
是用MARK来实现的。
map=bitmap;
ibitmapMask = new ( ELeave ) CFbsBitmap();
TInt err = ibitmapMask->Create(map->SizeInPixels(), EGray256);
if (err == KErrNone)
{
CFbsBitmapDevice *aGD = CFbsBitmapDevice::NewL(ibitmapMask);
CleanupStack::PushL(aGD);
CFbsBitGc *aGC = NULL;
User::LeaveIfError(aGD->CreateContext(aGC));
aGC->SetPenStyle(CGraphicsContext::ENullPen);
aGC->SetBrushColor(TRgb(100,100,100)); // color 的颜色随意,会影响透明度
aGC->SetBrushStyle(CGraphicsContext::ESolidBrush);
aGC->DrawRect(TRect(TPoint(0, 0), map->SizeInPixels()));
aGC->SetBrushStyle(CGraphicsContext::ENullBrush);
delete aGC;
CleanupStack::PopAndDestroy(aGD);
}
图片透明效果:
virtual void DrawBitmapMasked(const TRect &aDestRect, const CFbsBitmap *aBitmap, const TRect &aSourceRect, const CFbsBitmap *aMaskBitmap, TBool aInvertMask)=0;
图像的透明显示就是图像的一部分被真实地显示在屏幕上,而其余部分则被屏幕的背景所取代。
为了实现透明或者半透明的效果,一般我们用到一张掩码位图。它实际是一个黑白位图,作用是对其它位图的可见部分进行限制。它由两部分组成,不透明部分和透明部分。当TBool aInvertMask
为ETrue时,白色部分为透明部分。
color 的值为TRgb(255*x,255*x,255*x) x为透明度百分比。
原图TRgb(a1,a2,a3) 背景图TRgb(b1,b2,b3)
与背景色形成新的Rgb值(显示的Rgb)值为
TRgb(a1*x+b1*(1-x),a2*x+b2*(1-x),a3*x+b3*(1-x))