📄 smbmusicaplibimageresizer.cpp
字号:
//僋儔僀傾儞僩偵姰椆傪捠抦偡傞
User::RequestComplete(iClientStatus, KErrNone);
iClientStatus = NULL;
//惉岟偟偨応崌丄儕僒僀僘偟偨Bitmap偺強桳尃傪梫媮懁偵搉偡
iDstBitmap = NULL;
}
}
/**
* 傾僋僥傿僽僆僽僕僃僋僩偺DoCancel張棟
**/
void CSmbMusicAPLibImageResizer::DoCancel()
{
// MODIFY-S [D_82400003832]GIF偺儕僒僀僘僄儔乕懳墳
if (iHardwareBitmapHandle != NULL)
{ // 尰嵼偺張棟偑僴乕僪僂僃傾價僢僩儅僢僾偺応崌
if (iG2Scaler != NULL)
{
// G2PF偺僉儍儞僙儖
iG2Scaler -> CancelScale();
}
}
else
{ // 尰嵼偺張棟偑僴乕僪僂僃傾價僢僩儅僢僾偱側偄応崌
if (iBmScaler != NULL)
{
// Symbian婛懚偺僉儍儞僙儖
iBmScaler -> Cancel();
}
}
// MODIFY-E [D_82400003832]GIF偺儕僒僀僘僄儔乕懳墳
}
/**
* 旕摨婜梫媮傪奐巒偡傞(AO傪Active偵偡傞)
**/
void CSmbMusicAPLibImageResizer::Start()
{
//AO偺Cancel傪屇傃弌偡
Cancel();
//AO傪Active偵僙僢僩偡傞
SetActive();
}
/**
* 弌椡夋憸偺夋僒僀僘傪寁嶼偡傞
*
* @param[in] aSize 僠僃僢僋偡傞僒僀僘
* @param[in] aBeSpread 2攞奼戝幚峴僼儔僌(ETrue:奼戝偡傞丄EFalse:奼戝偟側偄)
*/
void CSmbMusicAPLibImageResizer::CheckSize(TSize aSize, TBool aBeSpread)
{
#ifdef __SMBMUSICAPLIB_ENABLE_PTX810__
TSize srcSize(iSrcBitmap -> iMainBitmap -> SizeInPixels());
if ((aSize.iWidth > srcSize.iWidth) && (aSize.iHeight > srcSize.iHeight))
{ // 奼戝
iDstSize = srcSize;
iAspectRatio = ETrue;
if (aBeSpread != EFalse)
{ // 奼戝僼儔僌僙僢僩偺応崌
if ((aSize.iWidth > srcSize.iWidth * 2) && (aSize.iHeight > srcSize.iHeight * 2))
{ // 2攞偟偰傕廂傑傟偽
// 2攞偵奼戝偡傞
iDstSize.iWidth = srcSize.iWidth * 2;
iDstSize.iHeight = srcSize.iHeight * 2;
}
}
}
else
{ // 弅彫
iDstSize = aSize;
//崅偝偑戝偒偄応崌
if(srcSize.iWidth <= srcSize.iHeight)
{
//崅偝傪婎弨偵偡傞
TReal heightRatio = (TReal)aSize.iHeight / (TReal)srcSize.iHeight;
aSize.iWidth = (TUint32)( heightRatio * (TReal)srcSize.iWidth );
if(0 == aSize.iWidth)
{
//暆偑侽偵側偭偰偟傑偆偺偱丄傾僗儁僋僩斾傪堐帩偱偒側偄
iAspectRatio = EFalse;
//暆傪"1"偵挷惍偡傞
iDstSize.iWidth = 1;
return;
}
}
else //暆偑戝偒偄応崌
{
//暆傪婎弨偵偡傞
TReal widthRatio = (TReal)aSize.iWidth / (TReal)srcSize.iWidth;
aSize.iHeight = (TUint32)( widthRatio * (TReal)srcSize.iHeight);
if(0 == aSize.iHeight)
{
//崅偝偑侽偵側偭偰偟傑偆偺偱丄傾僗儁僋僩斾傪堐帩偱偒側偄
iAspectRatio = EFalse;
//崅偝傪"1"偵挷惍偡傞
iDstSize.iHeight = 1;
return;
}
}
//偦偺懠偺応崌丄傾僗儁僋僩斾傪堐帩偱偒傞
iAspectRatio = ETrue;
}
#else // __SMBMUSICAPLIB_ENABLE_PTX810__
TSize srcSize(iSrcBitmap -> iMainBitmap -> SizeInPixels());
if ((srcSize.iWidth > aSize.iWidth) || (srcSize.iHeight > aSize.iHeight))
{ // 儕僒僀僘尦夋憸偺僒僀僘偑丄弌椡僒僀僘傛傝戝偒偄応崌
// 弅彫張棟幚峴両
iDstSize = aSize;
CSmbImageMW::HeightAndWidthPreservingAspectRatio(iDstSize, srcSize);
if (iDstSize.iWidth == 0)
{ // 傾僗儁僋僩斾堐帩偟偨傜墶暆偑0偵側偭偨
// 傾僗儁僋僩斾曵偟偰傕墶暆傪1偩偗妋曐偡傞
iDstSize.iWidth = 1;
}
if (iDstSize.iHeight == 0)
{ // 傾僗儁僋僩斾堐帩偟偨傜廲暆偑0偵側偭偨
// 傾僗儁僋僩斾曵偟偰傕廲暆傪1偩偗妋曐偡傞
iDstSize.iHeight = 1;
}
}
else
{ // 儕僒僀僘尦夋憸偺僒僀僘偑丄弌椡僒僀僘傛傝彫偝偄応崌
iDstSize = srcSize;
if (aBeSpread != EFalse)
{ // 夋憸奼戝僼儔僌偑愝掕偝傟偰偄傞応崌
if (((srcSize.iWidth * 2) <= aSize.iWidth) && ((srcSize.iHeight * 2) <= aSize.iHeight))
{ // 尦夋憸偺夋僒僀僘傪2攞偟偰傕弌椡夋憸僒僀僘埲壓偺応崌
// 2攞奼戝傪幚峴偡傞
iDstSize.iWidth = srcSize.iWidth * 2;
iDstSize.iHeight = srcSize.iHeight * 2;
}
}
}
#endif // __SMBMUSICAPLIB_ENABLE_PTX810__
}
// MODIFY-E PTX824 k3-sugimoto
/**
* 尦偺Bitmap傪巜掕偝傟偨僒僀僘偺怴偨側Bitmap偵儕僒僀僘偡傞
* @param[in] aSrcBitmap 儕僒僀僘偡傞尦Bitmap
* @param[in,out] aDstBitmap 儕僒僀僘偟偨怴偨側Bitmap
* @param[in,out] aStatus 旕摨婜墳摎梡偺傾僋僥傿僽僆僽僕僃僋僩僗僥乕僞僗
* @return 張棟寢壥
*/
TInt CSmbMusicAPLibImageResizer::Resize(CFbsBitmap& aSrcBitmap, CFbsBitmap& aDstBitmap, TRequestStatus& aStatus)
{
//iDstSize丄堷悢偱梌偊傜傟偨Bitmap偺DisplayMode傪愝掕偡傞
TDisplayMode dispMode = aSrcBitmap.DisplayMode();
// MODIFY-S [D_82400003832]GIF偺儕僒僀僘僄儔乕懳墳
iHardwareBitmapHandle = aSrcBitmap.HardwareBitmapHandle();
// 僒僀僘偲僨傿僗僾儗僀儌乕僪偵廬偭偰丄儕僒僀僘偡傞Bitmap傪Create偡傞
if (iHardwareBitmapHandle == NULL)
{ // 尦夋憸偑HardwareBitmap偱側偄応崌
// G2PF 惷巭夋MW傪巊梡偱偒側偄偨傔Symbian婛懚婡擻偱儕僒僀僘傪峴偆
TInt ret = aDstBitmap.Create(iDstSize, dispMode);
if (ret != KErrNone)
{
TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibImageResizer | EMusicAPLibLocationNumber07;
_LIT(KMusicAPLibImageResizer07, "CSmbMusicAPLibImageResizer::Resize() [ErrAlloc]: Bitmap Create() = %d");
SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibImageResizer07, ret);
return ret;
}
if (iBmScaler == NULL)
{
TRAPD(error, iBmScaler = CBitmapScaler::NewL(););
if(KErrNone != error)
{
//儘僌弌椡
TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibImageResizer | EMusicAPLibLocationNumber08;
_LIT(KMusicAPLibImageResizer08, "CSmbMusicAPLibImageResizer::Resize() [ErrAlloc]: CBitmapScaler::NewL() = %d");
SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibImageResizer08, error);
//僄儔乕傪曉偡
return error;
}
}
TSize srcSize(aSrcBitmap.SizeInPixels());
TBool aspectRatio(ETrue);
if (srcSize.iWidth * iDstSize.iHeight != srcSize.iHeight * iDstSize.iWidth)
{ // 傾僗儁僋僩斾偑堐帩偱偒偰偄側偄応崌
aspectRatio = EFalse;
}
#ifdef __SMBMUSICAPLIB_ENABLE_PTX810__
aspectRatio = iAspectRatio;
#endif // __SMBMUSICAPLIB_ENABLE_PTX810__
iBmScaler -> Scale(&aStatus, aSrcBitmap, aDstBitmap, aspectRatio);
}
else
{ // 尦夋憸偑HardwareBitmap偺応崌
// G2PF 惷巭夋MW傪巊梡偟儕僒僀僘傪峴偆
TInt ret = aDstBitmap.CreateHardwareBitmap(iDstSize, dispMode, KRtUidImage);
if (ret != KErrNone)
{
TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibImageResizer | EMusicAPLibLocationNumber09;
_LIT(KMusicAPLibImageResizer09, "CSmbMusicAPLibImageResizer::Resize() [ErrAlloc]: HardBitmap Create() = %d");
SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibImageResizer09, ret);
return ret;
}
if (iG2Scaler == NULL)
{
TRAPD(error, iG2Scaler = CSmbImageMW::NewL(););
if(error != KErrNone)
{
//儘僌弌椡
TUint32 logCode = EMusicAPLibClassNumber_CSmbMusicAPLibImageResizer | EMusicAPLibLocationNumber10;
_LIT(KMusicAPLibImageResizer10, "CSmbMusicAPLibImageResizer::Resize() [ErrAlloc]: CSmbImageMW::NewL() = %d");
SmbMusicAPLibLog(logCode, ELogLevelHigh, KMusicAPLibImageResizer10, error);
//僄儔乕傪曉偡
return error;
}
}
// 僩儕儈儞僌柍岠丄弌椡夋僒僀僘偼aDstBitmap偺僒僀僘偱偄偄偺偱
// zeroRect傪巜掕偡傞丅
const TRect zeroRect(0, 0, 0, 0);
iG2Scaler -> Scale(&aStatus, &aSrcBitmap, &aDstBitmap, zeroRect, zeroRect);
}
// MODIFY-E [D_82400003832]GIF偺儕僒僀僘僄儔乕懳墳
return KErrNone;
}
/**
* 惗惉偟偨僆僽僕僃僋僩傪嶍彍偟丄旕摨婜梫媮傪姰椆偡傞
* @param aCode 姰椆僐乕僪
**/
void CSmbMusicAPLibImageResizer::DeleteObjectsAndComplete(TInt aCode)
{
//惗惉偟偨儊僀儞Bitmap偲MaskBitmap傪嶍彍偡傞
if(NULL != iDstBitmap)
{
delete iDstBitmap -> iMainBitmap;
iDstBitmap -> iMainBitmap = NULL;
delete iDstBitmap -> iMaskedBitmap;
iDstBitmap -> iMaskedBitmap = NULL;
iDstBitmap = NULL;
}
if(NULL != iClientStatus)
{
//僋儔僀傾儞僩偵旕摨婜廔椆傪捠抦偡傞
User::RequestComplete(iClientStatus, aCode);
iClientStatus = NULL;
}
}
// end of SmbMusicAPLibImageResizer.cpp
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -