步骤如下:
1.解码:(aFilename是png)
void LoadPicture(const TDesC& aFilename, CFbsBitmap* aFbsmap, CFbsBitmap* aMask)
{
CImageDecoder* Decoder = NULL;
TRAPD(err,Decoder = CImageDecoder::FileNewL(CCoeEnv::Static()->FsSession(),
aFilename, _L8("image/png"),
CImageDecoder::EOptionAlwaysThread));
if(err !=KErrNone)
{
delete Decoder;
return;
}
TFrameInfo iFrameInfo = Decoder->FrameInfo();
aFbsmap->Create(iFrameInfo.iOverallSizeInPixels, EColor16M );
aMask->Create(iFrameInfo.iOverallSizeInPixels,EGray256 );
TRequestStatus aStatus = KRequestPending;
TRAPD(err1,Decoder->Convert( &aStatus, *aFbsmap, *aMask));
User::WaitForRequest( aStatus );
delete Decoder;
}
2.保存:(aFileName是mbm,aConverFilename是png)
void SaveToMbm(const TDesC& aFileName, const TDesC& aConverFilename)
{
CFbsBitmap* bmp = new (ELeave) CFbsBitmap;
CFbsBitmap* mask = new (ELeave) CFbsBitmap;
Tool::LoadPicture(aConverFilename, bmp, mask);
TBuf<100> f1,f2;
f1.Copy(aFileName);
f1.Insert(aFileName.Length()-4, _L("_1"));
f2.Copy(aFileName);
f2.Insert(aFileName.Length()-4, _L("_2"));
bmp->Save(f1); //这里已经是mbm了
mask->Save(f2);
TInt32* uniqueIds = new ( ELeave ) TInt32[ 2 ];
CleanupStack::PushL( uniqueIds );
uniqueIds[ 0 ] = 0;
uniqueIds[ 1 ] = 0;
TFileName** filenames = new ( ELeave ) TFileName*[ 2 ];
CleanupStack::PushL( filenames );
filenames[ 0 ] = new (ELeave) TFileName( f1 );
filenames[ 1 ] = new (ELeave) TFileName( f2 );
CFbsBitmap* fbs = new (ELeave) CFbsBitmap;
fbs->StoreL(aFileName, 2, ( const TDesC** )filenames, uniqueIds);//添加到一个mbm
delete mask;
delete bmp;
delete fbs;
CleanupStack::Pop(2);
delete uniqueIds;
delete filenames[0];
delete filenames[1];
delete filenames;
}