Symbian CFbsMapd 图片开发
2010-03-24 17:22:00 来源:WEB开发网先说拉伸,我们可以通过以下调用得到:
backgroundGc2->DrawBitmap(rect2, iGulIcon->Bitmap());
很简单,但是这用拉伸或是缩放是有损耗的,如果不是纯色的图是看的出来差异的。
如果想让图片在doublebuffer的bitmap上是透明的就用此doublebuffer的gc的bitbltmasked的方法:
backgroundGc2->DrawBitmapMasked(rect2, iGulIcon->Bitmap(), TRect(iGulIcon->Bitmap()->SizeInPixels()), iGulIcon->Mask(), EFalse);
然后在sysmtemgc中用bitblt即可:
gc.BitBlt(TPoint(100, 0), iBackGround2);
此时的得到的效果是一个有mask的图片画到一个有背景色的bitmap上然后在把这个bitmap描画到window上,其实这个效果在上面我们已经得到了。
现在如果我们想真个offscreen的bitmap在window透明怎么弄呢?这里需要两个offscreen的bitmap,我们可以先把 bitmap用drawbitmap画到bitmap的offscreen上,然后在把mask画到mask的offscreen上,最后用 systemgc的bitbltmask方法把这个图片画到window上。代码如下:
iBackGround2 = new (ELeave) CFbsBitmap;
User::LeaveIfError(iBackGround2->Create(TSize(40, 40), iGulIcon->Bitmap()->DisplayMode()));
CFbsBitmapDevice *backgroundDevice2 = CFbsBitmapDevice::NewL(iBackGround2);
CFbsBitGc* backgroundGc2(NULL);
User::LeaveIfError(backgroundDevice2->CreateContext(backgroundGc2));
iBackGround2Mask = new (ELeave) CFbsBitmap;
User::LeaveIfError(iBackGround2Mask->Create(TSize(40, 40), iGulIcon->Mask()->DisplayMode()));
CFbsBitmapDevice *backgroundDevice2Mask = CFbsBitmapDevice::NewL(iBackGround2Mask);
CFbsBitGc* backgroundGc2Mask(NULL);
User::LeaveIfError(backgroundDevice2Mask->CreateContext(backgroundGc2Mask));
TRect rect2(TPoint(0, 0), TSize(40, 40));
backgroundGc2->SetBrushStyle(CGraphicsContext::ESolidBrush);
backgroundGc2->SetBrushColor(KRgbGreen);
backgroundGc2->DrawRect(rect2);
backgroundGc2->SetBrushStyle(CGraphicsContext::ENullBrush);
更多精彩
赞助商链接