00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "CImageHandler.h"
00017
00018 CImageHandler::CImageHandler(CFbsBitmap& aBitmap, RFs& aFs, MImageHandlerCallback& aCallback)
00019 : CActive(CActive::EPriorityStandard), iBitmap(aBitmap), iFs(aFs), iCallback(aCallback)
00020 {}
00021
00022 void CImageHandler::ConstructL()
00023 {
00024 iBitmapRotator = CBitmapRotator::NewL();
00025 iBitmapScaler = CBitmapScaler::NewL();
00026 CActiveScheduler::Add(this);
00027 }
00028
00029 CImageHandler::~CImageHandler()
00030 {
00031 delete iLoadUtil;
00032 delete iSaveUtil;
00033 delete iBitmapRotator;
00034 delete iBitmapScaler;
00035 }
00036
00037 void CImageHandler::LoadFileL(const TFileName& aFileName, TInt aSelectedFrame)
00038 {
00039 __ASSERT_ALWAYS(!IsActive(),User::Invariant());
00040
00041 delete iLoadUtil;
00042 iLoadUtil = NULL;
00043 iLoadUtil = CImageDecoder::FileNewL(iFs, aFileName);
00044
00045 iFrameInfo = iLoadUtil->FrameInfo(aSelectedFrame);
00046 iFrameCount = iLoadUtil->FrameCount();
00047
00048 TRect bitmapSize = iFrameInfo.iFrameCoordsInPixels;
00049 iBitmap.Resize(bitmapSize.Size());
00050
00051 iLoadUtil->Convert(&iStatus, iBitmap, aSelectedFrame);
00052 SetActive();
00053 }
00054
00055 void CImageHandler::SaveFileL(const TFileName& aFileName, const TUid& aImageType, const TUid& aImageSubType)
00056 {
00057 __ASSERT_ALWAYS(!IsActive(),User::Invariant());
00058
00059 delete iSaveUtil;
00060 iSaveUtil = NULL;
00061 iSaveUtil = CImageEncoder::FileNewL(iFs, aFileName, CImageEncoder::EOptionNone, aImageType, aImageSubType);
00062
00063 iSaveUtil->Convert(&iStatus, iBitmap);
00064 SetActive();
00065 }
00066
00067 void CImageHandler::Mirror()
00068 {
00069 __ASSERT_ALWAYS(!IsActive(),User::Invariant());
00070
00071 iBitmapRotator->Rotate(&iStatus, iBitmap, CBitmapRotator::EMirrorVerticalAxis);
00072 SetActive();
00073 }
00074
00075 void CImageHandler::Flip()
00076 {
00077 __ASSERT_ALWAYS(!IsActive(),User::Invariant());
00078
00079 iBitmapRotator->Rotate(&iStatus, iBitmap, CBitmapRotator::EMirrorHorizontalAxis);
00080 SetActive();
00081 }
00082
00083 void CImageHandler::FrameRotate(TBool aClockwise)
00084 {
00085 __ASSERT_ALWAYS(!IsActive(),User::Invariant());
00086
00087 if (aClockwise)
00088 iBitmapRotator->Rotate(&iStatus, iBitmap, CBitmapRotator::ERotation90DegreesClockwise);
00089 else
00090 iBitmapRotator->Rotate(&iStatus, iBitmap, CBitmapRotator::ERotation270DegreesClockwise);
00091 SetActive();
00092 }
00093
00094 void CImageHandler::ZoomFrame(TBool aZoomIn)
00095 {
00096 __ASSERT_ALWAYS(!IsActive(),User::Invariant());
00097
00098 TSize size(iBitmap.SizeInPixels());
00099 const TSize adjust(size.iWidth/2, size.iHeight/2);
00100 if (aZoomIn)
00101 size += adjust;
00102 else
00103 size -= adjust;
00104
00105 if (size.iWidth <= 10) size.iWidth = 10;
00106 if (size.iHeight <= 10) size.iHeight = 10;
00107
00108
00109 iBitmapScaler->Scale(&iStatus, iBitmap, size);
00110 SetActive();
00111 }
00112
00113 void CImageHandler::RunL()
00114 {
00115
00116 iCallback.ImageOperationCompleteL(iStatus.Int());
00117 }
00118
00119 void CImageHandler::DoCancel()
00120 {
00121
00122 if (iLoadUtil) iLoadUtil->Cancel();
00123 if (iSaveUtil) iSaveUtil->Cancel();
00124 iBitmapRotator->Cancel();
00125 iBitmapScaler->Cancel();
00126 }