symbian 显示位图和SVG图
2010-08-31 00:09:00 来源:WEB开发网//绘制非透明位图,选择不含有“Masked”单词的函数就可以了
TPoint ptPos=aRect.iTl;
gc.BitBlt(ptPos,iImage2); //绘制时保持原始大小
//绘制透明位图,需要有相应的掩码图,只有使用两者结合才能显示成功
TSize size=iImage2->SizeInPixels();
TRect sourceRect( TPoint( 0,0 ),size);
ptPos.iX+=size.iWidth;
gc.BitBltMasked(ptPos,iImage2,sourceRect,iImage2mask,ETrue);
//绘制放缩的透明位图
ptPos.iX+=size.iWidth;
size.iWidth*=2;
size.iHeight*=2;
TRect destRect(ptPos,size);
gc.DrawBitmapMasked(destRect,iImage2,sourceRect,iImage2mask,ETrue);
//在客户区的第2行绘制SVG图图标
//绘制非透明SVG图
ptPos=aRect.iTl;
ptPos.iY+=100;
gc.BitBlt(ptPos,iSoundSvg);
//绘制透明SVG图
TSize size2=iSoundSvg->SizeInPixels();
TRect sourceRect2( TPoint( 0,0 ),size2);
ptPos.iX+=size2.iWidth;
gc.BitBltMasked(ptPos,iSoundSvg,sourceRect2,iSoundSvgMask,ETrue);
特殊效果绘图:
//无闪烁重绘
有大量的绘图操作时,程序刷新可能会出现闪烁
Symbian 中,出了提供窗口客户区的绘图上下文设备用于屏幕 绘图外,还提供了一个位图设备。
位图设备实际指向了一个内容中的位图对象,通过位图设备上下文,可以直接把图像绘制到位图上,也就是通过程序代码 直接在内存中绘图,然后把绘制好的位图复制到窗口客户区中。
实现步骤:
1)在Container的头文件中声明
CFbsBitmap* iOffScreenBitmap;
CFbsBitmapDevice* iOffScreenBitmapDevice;
CFbsBitGc* iOffScreenBitmapGc;
CFbsBitmap* iSoundSvg;
2)定义在后台绘画使用的位图、位图设备,位图上下文//ConstructL()
//加载svg矢量图
TFileName svgFile (KSvgPath);
User::LeaveIfError (CompleteWithAppPath (svgFile));
iSoundSvg=AknIconUtils::CreateIconL(svgFile,EMbmGraphic_svgSound);
更多精彩
赞助商链接