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對象。