Symbian CFbsMapd 图片开发
2010-03-24 17:22:00 来源:WEB开发网1:做过的人都知道,对于一张图,在Symbian中表示为 CFbsBitmap的对象,如果是有Mask的画就是两张,一个叫做bitmap一个叫做mask,一般我们是这样命名的。你可以在控件的draw方法里面取systemgc来描画它,为了得到mask透明就用如下的方法。
iBitmap = new(ELeave) CFbsBitmap();
iMask = new(ELeave) CFbsBitmap();
gc.BitBltMasked(TPoint(0, 0), iBitmap, TRect(iBitmap()->SizeInPixels()), iMask, EFalse);
2:现在我们把这个有mask的图不直接描画到window上,而是用 double-buffer的方法来描画到一个offscreen的bitmap上,如果我们现在这个offscreen的bitmap上先画个红色,而且像让我们后来描画的图片不覆盖offscreen的底图颜色,即要求他仍然后mask的透明效果我们就需要这么做:
iBackGround = new(ELeave) CFbsBitmap;
User::LeaveIfError(iBackGround->Create(iGulIcon->Bitmap()->SizeInPixels(), iGulIcon->Bitmap()->DisplayMode()));
CFbsBitmapDevice *backgroundDevice = CFbsBitmapDevice::NewL(iBackGround);
CFbsBitGc* backgroundGc(NULL);
User::LeaveIfError(backgroundDevice->CreateContext(backgroundGc));
backgroundGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
backgroundGc->SetBrushColor(KRgbRed);
backgroundGc->DrawRect(TRect(iGulIcon->Bitmap()->SizeInPixels()));
backgroundGc->SetBrushStyle(CGraphicsContext::ENullBrush);
backgroundGc->BitBltMasked(TPoint(0, 0), iGulIcon->Bitmap(), iGulIcon->Bitmap()->SizeInPixels(), iGulIcon->Mask(), EFalse);
delete backgroundGc;
delete backgroundDevice;
当我们在用systemgc的如下方法描画时就得到一个方红图上一个图标:
gc.BitBlt(TPoint(50, 0), iBackGround);
3. 如果我们把这个图片进行拉伸,就可以用gc的drawbitmap来做。此处有两种不同的效果,如果我们想拉伸后的图在新的doublebuffer上是 mask透明的,还有就是整个doublebuffer的bitmap在window上是透明的。这是两种不同的效果,需要区分,实现的时候也是不一样的。
更多精彩
赞助商链接