--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingfws/src/Test/TImageTran/TImageTranSupp.cpp Wed Sep 01 12:38:50 2010 +0100
@@ -0,0 +1,270 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "TImageTran.h"
+#include <iclexifimageframe.h>
+
+
+/*
+ * Case-insensitive matching of possibly-abbreviated keyword switches.
+ * keyword is the constant keyword (must be lower case already),
+ * minchars is length of minimum legal abbreviation.
+ */
+TBool CITArgsandFuncts::KeywordMatch (TPtrC aKeyMatch, const TDesC16& aKeyWord, TInt aMinCharsMatch)
+ {
+
+ if(aKeyMatch.MatchF(aKeyWord) != KErrNotFound)
+ {
+ return ETrue;
+ }
+
+ if((aKeyWord.Length() < aMinCharsMatch))
+ {
+ return EFalse; //no matching keyword found
+ }
+ return EFalse;
+ }
+
+/* Read next argument from commandline */
+void CITArgsandFuncts::ReadNextArg(TInt aArgNum)
+ {
+ if (aArgNum >= iCmdArgs->Count()) /* advance to next argument */
+ {
+ iEndOfCmd = ETrue;
+ //ExitImageTranTool();
+ }
+ else
+ {
+ iArgumentPtr.Set(iCmdArgs->Arg(aArgNum));
+ }
+ }
+
+/*
+* Get the input image size to check that MaxImagesize and MinImagesize are
+* within the input image size range
+*
+*/
+void CITArgsandFuncts::Fetch_ImageSize()
+ {
+ CJPEGImageFrameDecoder *decoder = NULL;
+ TRAPD(error, decoder= static_cast<CJPEGImageFrameDecoder*> (CImageDecoder::FileNewL(iFs, iInputfile, CImageDecoder::EOptionNone, KNullUid, KNullUid, KImageFramePluginUid)));
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("JpegCodec does not support this image format.InputImageSize caluculation for autosqueeze transformation failed with %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ const TFrameInfo* frameInfo = NULL;
+ frameInfo = &decoder->FrameInfo();
+ iInputImageSize = frameInfo->iOverallSizeInPixels;
+
+ if(iSqueezeAutoResizeParams.iMaxImageSize.iWidth > iInputImageSize.iWidth )
+ {
+ iConsole->Printf(_L("MaxImage width is greater than the input image width\n"));
+ ExitImageTranTool();
+ }
+
+ if(iSqueezeAutoResizeParams.iMaxImageSize.iHeight > iInputImageSize.iHeight )
+ {
+ iConsole->Printf(_L("MaxImage height is greater than the input image height\n"));
+ ExitImageTranTool();
+ }
+
+ if(iSqueezeAutoResizeParams.iMinImageSize.iWidth > iInputImageSize.iWidth && iSqueezeAutoResizeParams.iMinImageSize.iWidth > iSqueezeAutoResizeParams.iMaxImageSize.iWidth)
+ {
+ iConsole->Printf(_L("MinImage width is greater than the input image width/Maximage height\n"));
+ ExitImageTranTool();
+ }
+ if(iSqueezeAutoResizeParams.iMinImageSize.iHeight > iInputImageSize.iHeight && iSqueezeAutoResizeParams.iMinImageSize.iHeight > iSqueezeAutoResizeParams.iMaxImageSize.iHeight)
+ {
+ iConsole->Printf(_L("MinImage height is greater than the input image height/Maximage height\n"));
+ ExitImageTranTool();
+ }
+ delete decoder;
+ }
+
+/*
+* Validate whether its a valid numeric number or not
+* validation is done based on the ascii value of the character
+* for digits 0 to 9 it starts from 48 to 57
+*/
+TUint CITArgsandFuncts::ValidateImageSize()
+ {
+ TUint tmpVal;
+ TLex lLex(iArgumentPtr);
+ TLex lLextmp(iArgumentPtr);
+ TChar charArg = lLex.Get();
+ do
+ {
+ if(charArg > 47 && charArg < 58 )
+ {
+ charArg = lLex.Get();
+ }
+ else
+ {
+ if(charArg < 47 || charArg > 58)
+ {
+ iConsole->Printf(_L("SizeinBytes or ImageSize is incorrect alphabetic or alphanumeric or special characters\n"));
+ ExitImageTranTool();
+ }
+ }
+ }while(!lLex.Eos());
+
+ lLextmp.Val(tmpVal);
+ return tmpVal;
+ }
+
+/*
+ * Set source and destination file, squeeze option
+ */
+void CITArgsandFuncts::SetupTransformation (ITRAN_CODES aTransCode)
+ {
+ TInt error = KErrNone;
+
+ TRAP(error, iImageTransform->SetSourceFilenameL(iInputfile));
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Input file is having a problem failed with error : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ TRAP(error, iImageTransform->SetDestFilenameL(iOutputfile));
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Output file is having a problem failed with error: %d\n"), error);
+ ExitImageTranTool();
+ }
+ if(aTransCode == ITRAN_SQU || aTransCode == ITRAN_AUTOSQU)
+ {
+ TRAP(error, iImageTransform->SetTransformationsL(CImageTransform::ESqueeze));
+ }
+ else if (aTransCode == ITRAN_ROTATE || aTransCode == ITRAN_FLIP ||
+ aTransCode == ITRAN_TRANSPOSE || aTransCode == ITRAN_TRANSVERSE)
+ {
+ TRAP(error, iImageTransform->SetTransformationsL(CImageTransform::EOrientation));
+ }
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Not a valid option : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ TRAP(error, iImageTransform->SetupL());
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Not a valid input or outputfile : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ if(aTransCode == ITRAN_SQU || aTransCode == ITRAN_AUTOSQU)
+ {
+ TUid lSqUid = {KUidSqueezeTransformExtension};
+ iTransExtn = static_cast<CSqueezeTransformExtension*>(iImageTransform->Extension(lSqUid, error));
+ if(!iTransExtn)
+ {
+ iConsole->Printf(_L("Extension Returned unexpected error: %d"), error);
+ ExitImageTranTool();
+ }
+ }
+ else if(aTransCode == ITRAN_ROTATE || aTransCode == ITRAN_FLIP ||
+ aTransCode == ITRAN_TRANSPOSE || aTransCode == ITRAN_TRANSVERSE)
+ {
+ TUid lTransOrUid = {KUidOrientationTransformExtension};
+ iTransOrientation = static_cast<COrientationTransformExtension*>(iImageTransform->Extension(lTransOrUid, error));
+ if(!iTransOrientation)
+ {
+ iConsole->Printf(_L("Extension Returned unexpected error: %d"), error);
+ ExitImageTranTool();
+ }
+ }
+ }
+
+/* Set extension, overlayfile and overlay position for overlay comamnd */
+void CITArgsandFuncts::SetupOverlayTrans()
+ {
+ TInt error = KErrNone;
+ TUid lTransOlUid = {KUidOverlayTransformExtension};
+
+ TRAP(error, iImageTransform->SetSourceFilenameL(iInputfile));
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Input file is having a problem failed with error : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ TRAP(error, iImageTransform->SetDestFilenameL(iOutputfile));
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Output file is having a problem failed with error: %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ TRAP(error, iImageTransform->SetTransformationsL(CImageTransform::EOverlay));
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Not a valid option : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ TRAP(error, iImageTransform->SetupL());
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Not a valid input or outputfile : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ iOverlayExtn = static_cast<COverlayTransformExtension*>(iImageTransform->Extension(lTransOlUid, error));
+ if(!iOverlayExtn)
+ {
+ iConsole->Printf(_L("Extension Returned unexpected error: %d"), error);
+ ExitImageTranTool();
+ }
+
+ iOverlayExtn->SetPosition(iPoint);
+
+ TParse fileExtn;
+ fileExtn.Set(iOverlayfile,NULL,NULL);
+
+ if(error != KErrNotFound)
+ {
+ if(KeywordMatch(fileExtn.Ext(),_L(".mbm"),3))
+ {
+ CFbsBitmap bitmap;
+ error = bitmap.Load(iOverlayfile);
+ if (error != KErrNone)
+ {
+ iConsole->Printf(_L("Cannot load overlayfile into a bitmap, failed with error: %d\n"), error);
+ ExitImageTranTool();
+ }
+ TRAP(error, iOverlayExtn->SetOverlayImageL(bitmap));
+ }
+ else if(KeywordMatch(fileExtn.Ext(),_L(".jpg"),3))
+ {
+ TUid uUid = KImageTypeJPGUid;
+ TRAP(error, iOverlayExtn->SetOverlayFileL(iOverlayfile, uUid));
+ }
+ else if(KeywordMatch(fileExtn.Ext(),_L(".png"),3))
+ {
+ TUid uUid = KImageTypePNGUid;
+ TRAP(error, iOverlayExtn->SetOverlayFileL(iOverlayfile, uUid));
+ }
+ }
+ if(error != KErrNone)
+ {
+ iConsole->Printf(_L("Not a valid option : %d\n"), error);
+ ExitImageTranTool();
+ }
+
+ }