WEB开发网
开发学院手机开发Symbian 开发 Symbian CFbsMapd 图片开发 阅读

Symbian CFbsMapd 图片开发

 2010-03-24 17:22:00 来源:WEB开发网   
核心提示:先说拉伸,我们可以通过以下调用得到:backgroundGc2->DrawBitmap(rect2, iGulIcon->Bitmap());很简单,Symbian CFbsMapd 图片开发(2),但是这用拉伸或是缩放是有损耗的,如果不是纯色的图是看的出来差异的,我们可以先把 bitmap用drawbit

先说拉伸,我们可以通过以下调用得到:

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);

Tags:Symbian CFbsMapd 图片

编辑录入:coldstar [复制链接] [打 印]
赞助商链接