现在的位置: 首页 > 综合 > 正文

如何使用CImageEncoder进行图片压缩转换

2012年11月08日 ⁄ 综合 ⁄ 共 1377字 ⁄ 字号 评论关闭

以下代码示例说明如何在Symbian C++使用CImageEncoder进行bmp图片压缩和转换成Jpg图片。

Tested on: Nokia N958GB, Nokia 5800Xpress Music

1. 取得屏幕旋转方向和大小信息并截取当前屏幕

 1 //取得屏幕设备指针
 2 const CWsScreenDevice* screenDevice = iCoeEnv.ScreenDevice();
 3     
 4 //取得屏幕大小和方向信息
 5 screenDevice->GetScreenModeSizeAndRotation(
 6   screenDevice->CurrentScreenMode(), iSizeAndRotation);
 7 
 8 //截屏操作
 9 CFbsBitmap* iBitmap = new (ELeave) CFbsBitmap();
10     iBitmap->Create(iSizeAndRotation.iPixelSize, screenDevice->DisplayMode());
11 
12 iBitmap->SetSizeInTwips(screenDevice);
13 
14 screenDevice->CopyScreenToBitmap(iBitmap);

 

2. 设置需要转化文件的格式和参数,使用异步方法进行压缩。

 1 //生成一个CFrameImageData对象的指针
 2 CFrameImageData* frameImageData = CFrameImageData::NewL();
 3 CleanupStack::PushL(frameImageData);
 4 
 5 //转化成Jpeg格式的参数设定,iSampleScheme,iQualityFactor
 6 TJpegImageData* imageData = new (ELeave) TJpegImageData();
 7 imageData->iSampleScheme  = TJpegImageData::EColor444;
 8 imageData->iQualityFactor = iSettingData.ImageQuality();
 9 User::LeaveIfError(frameImageData->AppendImageData(imageData));
10 
11 //DataNewL方法来制定转换的格式和方法
12 iImageEncoder = CImageEncoder::DataNewL
13     (iCapturedImageBuffer, KImageTypeJpg, CImageEncoder::EOptionAlwaysThread);
14     
15 //异步请求转化为指定格式的文件
16 iImageEncoder->Convert(&iStatus, *iBitmap, frameImageData);
17 
18 CleanupStack::PopAndDestroy(frameImageData);
19 

 

上述代码片段由于使用了异步方法,需要在活动对象中(Active Object)使用。

同理,使用CImageEncoder也可进行其他图片格式的转换。

抱歉!评论已关闭.