Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 00:47, 28 June 2007.

在缩放图片时不保留高宽比将导致程序异常

From Forum Nokia Wiki

  • 设备, 软件 版本:

S60 2nd Edition, FP3, N70, N90


  • 说明:

如果在使用CBitmapScaler::Scale()时将aMaintainAspectRatio参数设置为EFalse,将会导致程序异常


  • 详细描述:

如果程序使用CBitmapScaler的Scale方法将一个张图片(如为132x176)进行了缩放处理(如176x144),而其aMaintainAspectRatio参数为EFalse,则程序会引发USER 21错误,异常中断。


  • 解决方案:

如果需要将上述情况进行缩放绘制到屏幕上,你可以使用CGraphicContext:DrawBitmap方法。 如果缩放后的图片还要使用,你可在CBitmapContext对象上使用同样方式处理,保持图片原来构造时的样子。下列代码可融入Series 60 Developer Platform 2.0: Image Converter Example示例中做测试使用。

void CImageConverterEngine::ScaleL(TSize aSize)
{
 
    CWsBitmap *newBitmap = new (ELeave)
 
    CWsBitmap(CEikonEnv::Static()->WsSession());
 
    CleanupStack::PushL(newBitmap);
 
    User::LeaveIfError(newBitmap->Create(
         aSize,CEikonEnv::Static()->DefaultDisplayMode()));
 
 
    CFbsBitmapDevice* bitDev = CFbsBitmapDevice::NewL(newBitmap);
 
    CleanupStack::PushL(bitDev);
 
    CBitmapContext* bgc = NULL;
 
    User::LeaveIfError(bitDev->CreateBitmapContext(bgc));
 
 
    bgc->DrawBitmap(TRect(TPoint(0,0), aSize), iBitmap);
 
    delete bgc;
 
    CleanupStack::PopAndDestroy(2); // bitDev, newBitmap
 
    delete iBitmap;
 
    iBitmap = newBitmap;
 
    iController->NotifyCompletion(KErrNone);
}
 
Powered by MediaWiki