Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_imageconverterengine_8cpp_source.html
author Dominic Pinkman <dominic.pinkman@nokia.com>
Fri, 13 Aug 2010 16:47:46 +0100
changeset 14 578be2adaf3e
parent 6 43e37759235e
permissions -rw-r--r--
Week 32 contribution of PDK documentation content. See release notes for details. Fixes bug Bug 3582

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>TB9.2 Example Applications: examples/ForumNokia/ImageConverter/src/Imageconverterengine.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.2 -->
<h1>examples/ForumNokia/ImageConverter/src/Imageconverterengine.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright © 2008 Nokia Corporation.</span>
<a name="l00003"></a>00003 <span class="comment"> */</span>
<a name="l00004"></a>00004 
<a name="l00005"></a>00005 <span class="preprocessor">#include &quot;ImageConverterEngine.h&quot;</span>
<a name="l00006"></a>00006 
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;fbs.h&gt;</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;ImageConversion.h&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;BitmapTransforms.h&gt;</span>
<a name="l00010"></a>00010 
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;eikdef.h&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;eikenv.h&gt;</span>
<a name="l00013"></a>00013 
<a name="l00014"></a>00014 <span class="keyword">const</span> TInt KMaxInfoMsgLength = 50;
<a name="l00015"></a>00015 <span class="keyword">const</span> TInt KFixImageHeight = 70;
<a name="l00016"></a>00016 <span class="keyword">const</span> TInt KFixImageWidth = 10;
<a name="l00017"></a>00017 
<a name="l00018"></a>00018 <a class="code" href="class_c_image_converter_engine.html">CImageConverterEngine</a>* CImageConverterEngine::NewL( 
<a name="l00019"></a>00019     <a class="code" href="class_m_converter_controller.html">MConverterController</a>* aController )
<a name="l00020"></a>00020     {
<a name="l00021"></a>00021     <a class="code" href="class_c_image_converter_engine.html">CImageConverterEngine</a>* <span class="keyword">self</span> = 
<a name="l00022"></a>00022         <span class="keyword">new</span>(ELeave) <a class="code" href="class_c_image_converter_engine.html">CImageConverterEngine</a>( aController );
<a name="l00023"></a>00023     CleanupStack::PushL( <span class="keyword">self</span> );
<a name="l00024"></a>00024     
<a name="l00025"></a>00025     <span class="keyword">self</span>-&gt;ConstructL();
<a name="l00026"></a>00026 
<a name="l00027"></a>00027     CleanupStack::Pop(<span class="keyword">self</span>);
<a name="l00028"></a>00028     <span class="keywordflow">return</span> <span class="keyword">self</span>; 
<a name="l00029"></a>00029     }
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 CImageConverterEngine::CImageConverterEngine( 
<a name="l00032"></a>00032     <a class="code" href="class_m_converter_controller.html">MConverterController</a>* aController ) : 
<a name="l00033"></a>00033     CActive( EPriorityStandard ), iController( aController )
<a name="l00034"></a>00034     {
<a name="l00035"></a>00035     }
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="keywordtype">void</span> CImageConverterEngine::ConstructL()
<a name="l00038"></a>00038     {
<a name="l00039"></a>00039     User::LeaveIfError( iFs.Connect() );
<a name="l00040"></a>00040     iRotator = CBitmapRotator::NewL();
<a name="l00041"></a>00041     iScaler = CBitmapScaler::NewL();
<a name="l00042"></a>00042     <span class="comment">//iGlobalNote = CAknGlobalNote::NewL();</span>
<a name="l00043"></a>00043     iState = EIdle;
<a name="l00044"></a>00044     CActiveScheduler::Add( <span class="keyword">this</span> );
<a name="l00045"></a>00045     }
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 CImageConverterEngine::~CImageConverterEngine()
<a name="l00048"></a>00048     {
<a name="l00049"></a>00049     Cancel();
<a name="l00050"></a>00050     <span class="keyword">delete</span> iImageEncoder; 
<a name="l00051"></a>00051     <span class="keyword">delete</span> iImageDecoder; <span class="comment">// CImageDecoder must be deleted before the </span>
<a name="l00052"></a>00052     iFs.Close();          <span class="comment">//   related RFs is closed, </span>
<a name="l00053"></a>00053     <span class="keyword">delete</span> iBitmap;       <span class="comment">//   otherwise a related thread might panic   </span>
<a name="l00054"></a>00054     <span class="keyword">delete</span> iRotator;
<a name="l00055"></a>00055     <span class="keyword">delete</span> iScaler;
<a name="l00056"></a>00056     <span class="comment">//delete iGlobalNote;</span>
<a name="l00057"></a>00057     }
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="keywordtype">void</span> CImageConverterEngine::StartToDecodeL( TFileName&amp; aFileName )
<a name="l00060"></a>00060     {
<a name="l00061"></a>00061     <span class="keywordflow">if</span> (IsActive())
<a name="l00062"></a>00062         {
<a name="l00063"></a>00063         <span class="keywordflow">return</span>;
<a name="l00064"></a>00064         }
<a name="l00065"></a>00065 
<a name="l00066"></a>00066     <span class="keyword">delete</span> iImageDecoder; iImageDecoder = NULL;
<a name="l00067"></a>00067     <span class="keyword">delete</span> iBitmap; iBitmap = NULL;
<a name="l00068"></a>00068 
<a name="l00069"></a>00069     iFilename.Copy(aFileName);
<a name="l00070"></a>00070     
<a name="l00071"></a>00071     <span class="comment">// create the decoder</span>
<a name="l00072"></a>00072     iImageDecoder = CImageDecoder::FileNewL( iFs, aFileName );
<a name="l00073"></a>00073     
<a name="l00074"></a>00074     <span class="comment">// create the destination bitmap</span>
<a name="l00075"></a>00075     iBitmap = <span class="keyword">new</span> (ELeave) CFbsBitmap();
<a name="l00076"></a>00076     iBitmap-&gt;Create( iImageDecoder-&gt;FrameInfo().iOverallSizeInPixels,
<a name="l00077"></a>00077                      iImageDecoder-&gt;FrameInfo().iFrameDisplayMode ); 
<a name="l00078"></a>00078 
<a name="l00079"></a>00079     <span class="comment">// start conversion to bitmap</span>
<a name="l00080"></a>00080     iState = EDecoding;
<a name="l00081"></a>00081     iImageDecoder-&gt;Convert( &amp;iStatus, *iBitmap );
<a name="l00082"></a>00082     SetActive();
<a name="l00083"></a>00083     }
<a name="l00084"></a>00084 
<a name="l00085"></a>00085 <span class="keywordtype">void</span> CImageConverterEngine::StartToEncodeL( 
<a name="l00086"></a>00086     TFileName&amp; aFileName, TUid aImageType, TUid aImageSubType )
<a name="l00087"></a>00087     {
<a name="l00088"></a>00088     <span class="keywordflow">if</span> (!iBitmap)
<a name="l00089"></a>00089         {
<a name="l00090"></a>00090         <span class="keywordflow">return</span>;
<a name="l00091"></a>00091         }
<a name="l00092"></a>00092     
<a name="l00093"></a>00093     <span class="keywordflow">if</span> (iImageEncoder)
<a name="l00094"></a>00094         {
<a name="l00095"></a>00095         <span class="keyword">delete</span> iImageEncoder; 
<a name="l00096"></a>00096         iImageEncoder = NULL;
<a name="l00097"></a>00097         }
<a name="l00098"></a>00098 
<a name="l00099"></a>00099     <span class="comment">// create the encoder</span>
<a name="l00100"></a>00100     iImageEncoder = CImageEncoder::FileNewL( iFs, aFileName, 
<a name="l00101"></a>00101         CImageEncoder::EOptionNone, aImageType, aImageSubType );
<a name="l00102"></a>00102 
<a name="l00103"></a>00103     iState = EEncoding;
<a name="l00104"></a>00104     iImageEncoder-&gt;Convert( &amp;iStatus, *iBitmap );
<a name="l00105"></a>00105     SetActive();
<a name="l00106"></a>00106     
<a name="l00107"></a>00107     ShowProgress();
<a name="l00108"></a>00108     }
<a name="l00109"></a>00109 
<a name="l00110"></a>00110 <span class="keywordtype">void</span> CImageConverterEngine::DoCancel()
<a name="l00111"></a>00111     {
<a name="l00112"></a>00112     CancelProgress();
<a name="l00113"></a>00113     
<a name="l00114"></a>00114     <span class="keywordflow">if</span>( iState == EDecoding )
<a name="l00115"></a>00115         {
<a name="l00116"></a>00116         iImageDecoder-&gt;Cancel();
<a name="l00117"></a>00117         }
<a name="l00118"></a>00118     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( iState == EEncoding )
<a name="l00119"></a>00119         {
<a name="l00120"></a>00120         iImageEncoder-&gt;Cancel();
<a name="l00121"></a>00121         }
<a name="l00122"></a>00122     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( iState == ERotating )
<a name="l00123"></a>00123         {
<a name="l00124"></a>00124         iRotator-&gt;Cancel();
<a name="l00125"></a>00125         }
<a name="l00126"></a>00126     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( iState == EScaling )
<a name="l00127"></a>00127         {
<a name="l00128"></a>00128         iScaler-&gt;Cancel();
<a name="l00129"></a>00129         }
<a name="l00130"></a>00130     <span class="keywordflow">else</span>
<a name="l00131"></a>00131         {
<a name="l00132"></a>00132         <span class="comment">// State is EIdle, do nothing</span>
<a name="l00133"></a>00133         }
<a name="l00134"></a>00134     }
<a name="l00135"></a>00135     
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 <span class="keywordtype">void</span> CImageConverterEngine::RunL()
<a name="l00138"></a>00138     {
<a name="l00139"></a>00139     CancelProgress();
<a name="l00140"></a>00140 
<a name="l00141"></a>00141     <span class="keywordflow">switch</span>( iState ) 
<a name="l00142"></a>00142         {
<a name="l00143"></a>00143         <span class="keywordflow">case</span> EDecoding:
<a name="l00144"></a>00144             {
<a name="l00145"></a>00145             iScaleDownCounter = 0;
<a name="l00146"></a>00146             <span class="keywordflow">if</span>( iStatus == KErrNone ) 
<a name="l00147"></a>00147                 {
<a name="l00148"></a>00148                 <span class="keywordflow">if</span> (FitToScreen())
<a name="l00149"></a>00149                     {
<a name="l00150"></a>00150                     iState = EIdle;
<a name="l00151"></a>00151                     <a class="code" href="secureclientandserver_8h.html#a5eadd4429627d82193b37536d4faa03a">_LIT</a>(KImageReady, <span class="stringliteral">&quot;Image ready&quot;</span>);
<a name="l00152"></a>00152                     iController-&gt;NotifyCompletion( KErrNone, KImageReady );
<a name="l00153"></a>00153                     }
<a name="l00154"></a>00154                 <span class="keywordflow">else</span>
<a name="l00155"></a>00155                     {
<a name="l00156"></a>00156                     <a class="code" href="secureclientandserver_8h.html#a5eadd4429627d82193b37536d4faa03a">_LIT</a>(KImageReady, <span class="stringliteral">&quot;Image not ready&quot;</span>);
<a name="l00157"></a>00157                     iController-&gt;NotifyCompletion( KErrNotReady, KImageReady );
<a name="l00158"></a>00158                     DoFitToScreen();
<a name="l00159"></a>00159                     }
<a name="l00160"></a>00160                 <span class="keywordflow">break</span>;
<a name="l00161"></a>00161                 }
<a name="l00162"></a>00162             <span class="keywordflow">else</span> <span class="keywordflow">if</span>( iStatus == KErrUnderflow ) 
<a name="l00163"></a>00163                 {
<a name="l00164"></a>00164                 ShowProgress();
<a name="l00165"></a>00165                 iImageDecoder-&gt;ContinueConvert( &amp;iStatus );
<a name="l00166"></a>00166                 SetActive();
<a name="l00167"></a>00167                 <span class="keywordflow">break</span>;
<a name="l00168"></a>00168                 }
<a name="l00169"></a>00169             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( iStatus == KErrCorrupt )
<a name="l00170"></a>00170                 {
<a name="l00171"></a>00171                 iState = EIdle;
<a name="l00172"></a>00172                 <a class="code" href="secureclientandserver_8h.html#a5eadd4429627d82193b37536d4faa03a">_LIT</a>(KImageCorrupt, <span class="stringliteral">&quot;Image file corrupted&quot;</span>);
<a name="l00173"></a>00173                 iController-&gt;NotifyCompletion( KErrCorrupt, KImageCorrupt );
<a name="l00174"></a>00174                 <span class="keywordflow">break</span>;
<a name="l00175"></a>00175                 }
<a name="l00176"></a>00176             <span class="keywordflow">else</span>
<a name="l00177"></a>00177                 {
<a name="l00178"></a>00178                 <span class="comment">// Unknown error</span>
<a name="l00179"></a>00179                 iState = EIdle;
<a name="l00180"></a>00180                 <a class="code" href="secureclientandserver_8h.html#a5eadd4429627d82193b37536d4faa03a">_LIT</a>( KErrorMsg, <span class="stringliteral">&quot;Error while opening image:%d&quot;</span> );
<a name="l00181"></a>00181                 TBuf&lt;KMaxInfoMsgLength&gt; buf;
<a name="l00182"></a>00182                 buf.Format( KErrorMsg, iStatus.Int() );
<a name="l00183"></a>00183                 iController-&gt;NotifyCompletion( iStatus.Int(), KErrorMsg );
<a name="l00184"></a>00184                 <span class="keywordflow">break</span>;
<a name="l00185"></a>00185                 }
<a name="l00186"></a>00186             }
<a name="l00187"></a>00187         <span class="keywordflow">case</span> EEncoding:
<a name="l00188"></a>00188             {
<a name="l00189"></a>00189             <a class="code" href="secureclientandserver_8h.html#a5eadd4429627d82193b37536d4faa03a">_LIT</a>(KImageSaved, <span class="stringliteral">&quot;Image saved&quot;</span>);
<a name="l00190"></a>00190             iState = EIdle;
<a name="l00191"></a>00191             iController-&gt;NotifyCompletion( iStatus.Int(), KImageSaved);
<a name="l00192"></a>00192             <span class="keywordflow">break</span>;
<a name="l00193"></a>00193             }
<a name="l00194"></a>00194         <span class="keywordflow">case</span> EScaling:
<a name="l00195"></a>00195             {
<a name="l00196"></a>00196             iState = EIdle;
<a name="l00197"></a>00197             iController-&gt;NotifyCompletion( iStatus.Int(), KNullDesC );
<a name="l00198"></a>00198             <span class="keywordflow">break</span>;
<a name="l00199"></a>00199             }
<a name="l00200"></a>00200         <span class="keywordflow">default</span>:
<a name="l00201"></a>00201         <span class="keywordflow">case</span> ERotating:
<a name="l00202"></a>00202             {
<a name="l00203"></a>00203             iState = EIdle;
<a name="l00204"></a>00204             iController-&gt;NotifyCompletion( iStatus.Int(), KNullDesC );
<a name="l00205"></a>00205             <span class="keywordflow">break</span>;
<a name="l00206"></a>00206             }
<a name="l00207"></a>00207         }   
<a name="l00208"></a>00208     }
<a name="l00209"></a>00209 
<a name="l00210"></a>00210 TInt CImageConverterEngine::RunError(TInt <span class="comment">/*aError*/</span>)   
<a name="l00211"></a>00211     {
<a name="l00212"></a>00212     CancelProgress();
<a name="l00213"></a>00213     <span class="comment">// Our RunL does not contain any method calls that would leave, so this method</span>
<a name="l00214"></a>00214     <span class="comment">// should never be called.</span>
<a name="l00215"></a>00215     <span class="keywordflow">return</span> KErrNone;
<a name="l00216"></a>00216     }
<a name="l00217"></a>00217 
<a name="l00218"></a>00218 <span class="keywordtype">void</span> CImageConverterEngine::GetEncoderImageTypesL( 
<a name="l00219"></a>00219     RImageTypeDescriptionArray&amp; aImageTypeArray )
<a name="l00220"></a>00220     {
<a name="l00221"></a>00221     CImageEncoder::GetImageTypesL( aImageTypeArray );
<a name="l00222"></a>00222     }
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 CFrameInfoStrings* CImageConverterEngine::GetImageInfoL()
<a name="l00225"></a>00225     {
<a name="l00226"></a>00226     <span class="comment">// notice that the information is returned from the original image</span>
<a name="l00227"></a>00227     <span class="comment">//  hence the scaling of the bitmap does not affect the info until</span>
<a name="l00228"></a>00228     <span class="comment">//  the bitmap is encoded back to image file and opened again</span>
<a name="l00229"></a>00229     <span class="keywordflow">if</span>( iImageDecoder )
<a name="l00230"></a>00230         {
<a name="l00231"></a>00231         <span class="keywordflow">return</span>( iImageDecoder-&gt;FrameInfoStringsL() );
<a name="l00232"></a>00232         }
<a name="l00233"></a>00233     <span class="keywordflow">else</span>
<a name="l00234"></a>00234         {
<a name="l00235"></a>00235         <span class="keywordflow">return</span> NULL ;
<a name="l00236"></a>00236         }
<a name="l00237"></a>00237     }
<a name="l00238"></a>00238 
<a name="l00239"></a>00239 <span class="keywordtype">void</span> CImageConverterEngine::Rotate( TDirection aDirection )
<a name="l00240"></a>00240     {
<a name="l00241"></a>00241     <span class="keywordflow">if</span> (iState != EIdle || !iBitmap)
<a name="l00242"></a>00242         {
<a name="l00243"></a>00243         <span class="comment">// Do nothing, if we are in the middle of processing a previous command</span>
<a name="l00244"></a>00244         <span class="keywordflow">return</span>;
<a name="l00245"></a>00245         }
<a name="l00246"></a>00246         
<a name="l00247"></a>00247     <span class="keywordflow">if</span>( aDirection == EClockwise90 ) 
<a name="l00248"></a>00248         {
<a name="l00249"></a>00249         iRotator-&gt;Rotate( &amp;iStatus, *iBitmap, 
<a name="l00250"></a>00250             CBitmapRotator::ERotation90DegreesClockwise );  
<a name="l00251"></a>00251         }
<a name="l00252"></a>00252     <span class="keywordflow">else</span> 
<a name="l00253"></a>00253         { 
<a name="l00254"></a>00254         <span class="comment">// 270 clockwise == 90 anticlockwise</span>
<a name="l00255"></a>00255         iRotator-&gt;Rotate( &amp;iStatus, *iBitmap, 
<a name="l00256"></a>00256             CBitmapRotator::ERotation270DegreesClockwise ); 
<a name="l00257"></a>00257         }
<a name="l00258"></a>00258 
<a name="l00259"></a>00259     iState = ERotating;
<a name="l00260"></a>00260     SetActive();
<a name="l00261"></a>00261     
<a name="l00262"></a>00262     ShowProgress();
<a name="l00263"></a>00263     }
<a name="l00264"></a>00264 
<a name="l00265"></a>00265 TBool CImageConverterEngine::FitToScreen()
<a name="l00266"></a>00266     {
<a name="l00267"></a>00267     TBool ret = ETrue;
<a name="l00268"></a>00268     TPixelsTwipsAndRotation sizeAndRotation;
<a name="l00269"></a>00269     CEikonEnv::Static()-&gt;ScreenDevice()-&gt;GetDefaultScreenSizeAndRotation(sizeAndRotation);
<a name="l00270"></a>00270     <span class="keywordflow">if</span> (iBitmap-&gt;SizeInPixels().iHeight &gt; sizeAndRotation.iPixelSize.iHeight-KFixImageHeight || 
<a name="l00271"></a>00271         iBitmap-&gt;SizeInPixels().iWidth &gt; sizeAndRotation.iPixelSize.iWidth-KFixImageWidth)
<a name="l00272"></a>00272         {
<a name="l00273"></a>00273         ret = EFalse;
<a name="l00274"></a>00274         }
<a name="l00275"></a>00275     <span class="keywordflow">return</span> ret;
<a name="l00276"></a>00276     }
<a name="l00277"></a>00277 
<a name="l00278"></a>00278 <span class="keywordtype">void</span> CImageConverterEngine::DoFitToScreen()
<a name="l00279"></a>00279     {
<a name="l00280"></a>00280     TPixelsTwipsAndRotation sizeAndRotation;
<a name="l00281"></a>00281     CEikonEnv::Static()-&gt;ScreenDevice()-&gt;GetDefaultScreenSizeAndRotation(sizeAndRotation);
<a name="l00282"></a>00282 
<a name="l00283"></a>00283     TInt newWidth = (sizeAndRotation.iPixelSize.iWidth-KFixImageWidth);
<a name="l00284"></a>00284     TInt newHeight = (sizeAndRotation.iPixelSize.iHeight-KFixImageHeight);
<a name="l00285"></a>00285         
<a name="l00286"></a>00286     <span class="comment">// the maintain aspect ratio is by default set to true</span>
<a name="l00287"></a>00287     iScaler-&gt;Scale( &amp;iStatus, *iBitmap, TSize(newWidth,newHeight) );
<a name="l00288"></a>00288 
<a name="l00289"></a>00289     iState = EScaling;
<a name="l00290"></a>00290     SetActive();
<a name="l00291"></a>00291     }
<a name="l00292"></a>00292 
<a name="l00293"></a>00293 TBool CImageConverterEngine::CanDownScaleMore()
<a name="l00294"></a>00294     {
<a name="l00295"></a>00295     <span class="keywordflow">if</span> (iScaleDownCounter &gt; 2)
<a name="l00296"></a>00296         {
<a name="l00297"></a>00297         <span class="keywordflow">return</span> EFalse;
<a name="l00298"></a>00298         }
<a name="l00299"></a>00299     <span class="keywordflow">else</span>
<a name="l00300"></a>00300         {
<a name="l00301"></a>00301         <span class="keywordflow">return</span> ETrue;
<a name="l00302"></a>00302         }
<a name="l00303"></a>00303     }
<a name="l00304"></a>00304 
<a name="l00305"></a>00305 TInt CImageConverterEngine::Scale( TInt aPercent )
<a name="l00306"></a>00306     {
<a name="l00307"></a>00307     <span class="keywordflow">if</span> (iState != EIdle || !iBitmap)
<a name="l00308"></a>00308         {
<a name="l00309"></a>00309         <span class="comment">// Do nothing, if we are in the middle of processing a previous command         </span>
<a name="l00310"></a>00310         <span class="keywordflow">return</span> KErrNotReady;
<a name="l00311"></a>00311         }
<a name="l00312"></a>00312 
<a name="l00313"></a>00313     <span class="comment">// Scaling down</span>
<a name="l00314"></a>00314     <span class="keywordflow">if</span> (aPercent &gt; 100)
<a name="l00315"></a>00315         {
<a name="l00316"></a>00316         <span class="keywordflow">if</span> (!CanDownScaleMore())
<a name="l00317"></a>00317             {
<a name="l00318"></a>00318             <span class="keywordflow">return</span> KErrCancel;
<a name="l00319"></a>00319             }
<a name="l00320"></a>00320         iScaleDownCounter++;
<a name="l00321"></a>00321 
<a name="l00322"></a>00322         TReal32 multiplier; 
<a name="l00323"></a>00323     
<a name="l00324"></a>00324         multiplier = aPercent/(TReal32)100.0;
<a name="l00325"></a>00325     
<a name="l00326"></a>00326         TInt newWidth = (TInt)(iBitmap-&gt;SizeInPixels().iWidth * multiplier);
<a name="l00327"></a>00327         TInt newHeight = (TInt)(iBitmap-&gt;SizeInPixels().iHeight * multiplier);
<a name="l00328"></a>00328             
<a name="l00329"></a>00329         <span class="comment">// the maintain aspect ratio is by default set to true</span>
<a name="l00330"></a>00330         iScaler-&gt;Scale( &amp;iStatus, *iBitmap, TSize(newWidth,newHeight) );
<a name="l00331"></a>00331 
<a name="l00332"></a>00332         iState = EScaling;
<a name="l00333"></a>00333         SetActive();
<a name="l00334"></a>00334         ShowProgress();
<a name="l00335"></a>00335         }
<a name="l00336"></a>00336     <span class="comment">// Scaling up gives original picture</span>
<a name="l00337"></a>00337     <span class="keywordflow">else</span>
<a name="l00338"></a>00338         {
<a name="l00339"></a>00339         TRAPD(err,
<a name="l00340"></a>00340                 StartToDecodeL(iFilename));
<a name="l00341"></a>00341         <span class="keywordflow">if</span> (err)
<a name="l00342"></a>00342             {
<a name="l00343"></a>00343             <span class="keywordflow">return</span> err;
<a name="l00344"></a>00344             }
<a name="l00345"></a>00345         }
<a name="l00346"></a>00346 
<a name="l00347"></a>00347     <span class="keywordflow">return</span> KErrNone;
<a name="l00348"></a>00348     }
<a name="l00349"></a>00349     
<a name="l00350"></a>00350 CFbsBitmap* CImageConverterEngine::GetBitmap()
<a name="l00351"></a>00351     {
<a name="l00352"></a>00352     <span class="keywordflow">if</span> (iState != EIdle)
<a name="l00353"></a>00353         <span class="keywordflow">return</span> NULL;
<a name="l00354"></a>00354     <span class="keywordflow">else</span>
<a name="l00355"></a>00355         <span class="keywordflow">return</span> iBitmap;
<a name="l00356"></a>00356     }
<a name="l00357"></a>00357 
<a name="l00358"></a>00358 <span class="keywordtype">void</span> CImageConverterEngine::ShowProgress()
<a name="l00359"></a>00359     {
<a name="l00360"></a>00360     <span class="comment">//TRAPD(err,</span>
<a name="l00361"></a>00361     <span class="comment">//    iNoteId = iGlobalNote-&gt;ShowNoteL(EAknGlobalWaitNote,_L(&quot;Working...&quot;));</span>
<a name="l00362"></a>00362     <span class="comment">//    );</span>
<a name="l00363"></a>00363     }
<a name="l00364"></a>00364 
<a name="l00365"></a>00365 <span class="keywordtype">void</span> CImageConverterEngine::CancelProgress()
<a name="l00366"></a>00366     {
<a name="l00367"></a>00367     <span class="comment">//TRAPD(err,</span>
<a name="l00368"></a>00368     <span class="comment">//    iGlobalNote-&gt;CancelNoteL(iNoteId);</span>
<a name="l00369"></a>00369     <span class="comment">//    );</span>
<a name="l00370"></a>00370     }
<a name="l00371"></a>00371 
<a name="l00372"></a>00372 
<a name="l00373"></a>00373 
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
</body>
</html>