当前位置:编程学习 > wap >>

CFbsBitmap load加载一个图片得问题

    {
    SetContainerWindowL( *aParent );
    }
iFocusControl = NULL;
iCommandObserver = aCommandObserver;
CFbsBitmap *landPage=new(ELeave)CFbsBitmap;
User::LeaveIfError(landPage->Load(_L("z:\\resource\\apps\\myiread.mbm"),EMbmMyireadLandinterface));
iLandpage=new(ELeave)CMyLandPage(landPage,*this);
iLandpage->ConstructL(aRect,this);
//  SetRect(aRect);
SetExtentToWholeScreen();
ActivateL();
}

为什么不显示图片呢 --------------------编程问答-------------------- 你这个只是加载图片,不是显示图片。要想显示图片需要在Draw函数中调用画图函数,例如gc。BitBlt等,可以在SDK的帮助文档中找到 --------------------编程问答--------------------

LIBRARY fbscli.lib 

LIBRARY bitgdi.lib 

二、假设你的View class叫做CMyView。在MyView.h里加入: 

代码: 

#include <fbs.h> 

... 

private: 

   CFbsBitmap* iOffScrnBmp; 

   CFbsBitmapDevice* iOffScrnBmpDevice; 

   CFbsBitGc* iOffScrnContext; 

三、在MyView.cpp里加入: 

代码: 

void CMyView::ConstructL(const TRect& aRect) 



   ... 

   iOffScrnBmp = new (ELeave) CWsBitmap(CEikonEnv::Static()->WsSession());
    
    CWsScreenDevice* screenDev = CEikonEnv::Static()->ScreenDevice();
    
    User::LeaveIfError(iOffScrnBmp->Create(screenDev->SizeInPixels(), 
            screenDev->DisplayMode()));
    
    iOffScrnBmpDevice = CFbsBitmapDevice::NewL(iOffScrnBmp);
    
    // iOffScreenGc is an instance of CFbsBitGc
    User::LeaveIfError(iOffScrnBmpDevice->CreateContext(iOffScrnContext));




说明一下。上面的代码除了生成了我们所需的Off-screen Buffer,即一个4096色的CFbsBitmap之外,还在它上面加了一个iOffScrnContext。这个东西(CFbsBitGc)是我们用来往我们的buffer上面画图用的工具。  

代码: 

CMyView::~CMyView() 



   delete iOffScrnBmp; 

   delete iOffScrnBmpDevice; 

   delete iOffScrnContext; 



void CMyView::Draw(const TRect& aRect) const 



   // 把我们的buffer清空 

   iOffScrnContext->Clear(Rect()); 

   // 在buffer里画方块,而不是在屏幕上 

   for (int i=0; i<100; i+=2) { 

      iOffScrnContext->DrawRect(TRect(TPoint(i,i), TSize(50,50))); 

   } 

   // 一次性把buffer画到屏幕上 

   CWindowGc& gc = SystemGc(); 

   gc.BitBlt(TPoint(0,0), iOffScrnBmp); 

}
双缓存画图,你参考一下!看看哪出错了! --------------------编程问答-------------------- 2楼基本都解释全了,,呵呵 --------------------编程问答-------------------- --------------------编程问答-------------------- 是啊,2楼基本把问题说到了,3楼给出的是双缓冲的方法,解决闪屏的问题,不是显示图片的方法,绘制图片需要调用gc.BitBlt();方法,或者gc.DrawBitmap()方法,具体参数需要查阅SDK。DrawBitmap可以对位图进行缩放操作。如果只是对原图进行绘制,推荐使用BitBlt()方法,效率高。
补充:移动开发 ,  Symbian
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,