png等格式图片转 mbm

步骤如下:

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;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值