Symbian 创建播放器界面

来源:互联网 发布:宜家的床垫 知乎 编辑:程序博客网 时间:2024/05/22 04:32

 

Symbian中一般位图载入,一般可以通过先生成mbm文件,然后通过加载bitmap的方法来显示位图!
创建.mbm文件有两种方法,一种在编译过程中自动创建,也可以使用bmconv工具手动创建。
1.编译过程中创建

      需要在程序的MMP文件中添加以下内容:

      start bitmap target-file
          [targetpath target-path ]
          [header ]
          [sourcepath source-path ]
          source color-depth source-bitmap-list
      end
 例如:
 START BITMAP OggInco.mbm
 HEADER
 TARGETPATH /system/apps/Ogg
 SOURCEPATH ../Bitmaps
 SOURCE C12 Ogg.bmp
 END

      target-file是生成的MBM文件的文件名
      targetpath 是可选项。如果未指定,MBM文件将生成在该应用程序的目录
      header 也是可选项。如果指定该关键字,将在epoc32/include目录下生成一个.mbg的头文件。生成的.mbg头文件中包含每一个位图的枚举值,在资源文件中需要此文件中生成的枚举值。此例生成 EMbmOggincoOgg
      sourcepath 指定原始Windows BMP文件的位置。
      source 该语句后的所有BMP文件必须是同样的色深。如果需要在一个单独的MBM文件中包含不同色深的BMP文件,必须指定多个source。
   
2.使用bmconv工具创建

      输入如下命令:

      bmconv sprites.mbm /c12ship.bmp /c12bullet.bmp /c12alien.bmp

      在bmconv命令后使用/u选项,可以从MBM文件中提取BMP文件,得到的BMP文件色深都是24。也可以使用在命令后指定/v选项来显示MBM文件的内容。在命令行下输入bmconv,查看它支持的所有选项。


mmp在Bitmap的.h文件里给其一个枚举型的ID的数字,这个ID数字产生在系统文件夹下,(epoc32include).Bitmap文件可以使用其ID数字在mbm文件中被存取,每一个ID都以下面的格式构造EMbm<MBM file name><bitmap file name>, 例如EMbmOggincoOgg

可以通过如下方法显示bitmap文件
CFbsBitmap* iBitmap;

void CTestGuiAppView::ConstructL(const TRect& aRect)
 {
 .....
 iBitmap = LoadMyBitmapL();
 }

CFbsBitmap* CTestGuiAppView::LoadMyBitmapL()
 {
 
 _LIT(KMbmFileName,"//system//apps//Ogg//OggInco.mbm");

     TFileName app = CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();
    TParsePtr parser(app);
    TFileName mbmFile = parser.Drive();
    mbmFile.Append(KMbmFileName);
    CFbsBitmap* iBgBmp = new (ELeave) CFbsBitmap();
    User::LeaveIfError(iBgBmp->Load(mbmFile, EMbmOggincoOgg));


 return iBgBmp ;
 }

void CTestGuiAppView::Draw(const TRect& /*aRect*/) const
 {
 ......
 gc.BitBlt(TPoint(10,10),iBitmap);

 }
最后别忘了添加#includ的文件lib文件和在析构函数中delete iBitmap;

 

 

1. 获取MBM文件名
如果这个MBM文件放在应用程序的目录下:
  如果跟你的应用程序同名,则可以用下面的方法获取:

TFileName mbmFile = CEikonEnv::Static()->EikAppUi()->Application()->BitmapStoreName();

  如果不同名,则可以只定义文件名,然后用下面的方法补全路径名:

#include <aknutils.h> // for CompleteWithAppPath()

_LIT(KMbmFileName, "images.mbm");
TFileName mbmFile = CompleteWithAppPath(mbmFile);

如果没在同一个目录下,则可以如下方法获取应用程序的文件名,从它的开头能查到盘符,加上你自己定义的路径和文件名就行了。

TFileName appFile = CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();

2. 加载位图
除了用位图的Load()方法,还可以用下面这个办法:

CFbsBitmap* bitmap = CEikonEnv::Static()->CreateBitmapL(mbmFile, EMbmHelloworldImage1);

好处是省了自己创建CFbsBitmap对象。