htiui/HtiServicePlugins/HtiScreenshotServicePlugin/inc/HtiTextRcg.h
changeset 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/htiui/HtiServicePlugins/HtiScreenshotServicePlugin/inc/HtiTextRcg.h	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 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:  Text recognition algorithm implementation.
+*
+*/
+
+
+#ifndef __HTI_TEXT_RCG_
+#define __HTI_TEXT_RCG_
+
+#include <fbs.h>
+#include <gulfont.h>
+#include <e32math.h>
+
+const TInt KDefaultAvgDiffMin = 50;
+const TInt KDefaultFgSSMin = 50;
+const TInt KDefaultFgAvgDiffMin = 5; //in "pure" (not AA) pixels
+const TInt KWorstCase = 0xFF;
+const TInt KSuccessThresold = 50;
+const TInt KNormCoefAcc = 2;
+
+const TInt KDefaultFGAAmount = 5;
+const TInt KDefaultBGAAmount = 10;
+
+const TInt KFgPatternColor = 0x00; //black
+const TInt KBgPatternColor = 0xff; //white
+
+TInt CompareTPoint(const TPoint& aP1,const TPoint& aP2);
+
+enum THtiTextRecgHints
+    {
+    EHintNone = 0,
+    EHintEdge = 1
+    };
+
+/**
+* The class implements text recognition algorithm on screenshots
+* based on system fonts
+*
+*/
+class CHtiTextRcg : public CBase
+{
+public:
+    CHtiTextRcg();
+    virtual ~CHtiTextRcg();
+
+    void SetHint(TInt aHint);
+
+    TBool RecognizeTextL(CFbsBitmap* aScreenshot,
+                        const TDesC& aText,
+                        const CFont* aFont,
+                        TRect& aResult);
+
+    /**
+    * aResult will contain the coordinates of the found text
+    *  Return 0 if match is perfect, 255 if text was not found
+    * return value from 0 to 255 means some error, the lower it is the better match
+    *
+    */
+    //brute force optim
+    TInt RecognizeAAL(CFbsBitmap* aScreenshot,const TDesC& aText, const CFont* aFont, TRect& aResult);
+    //brute force clean optim
+    TInt RecognizeBinL(CFbsBitmap* aScreenshot,const TDesC& aText, const CFont* aFont, TRect& aResult);
+
+    //static image processing routines
+    //convert image to 256-greyscale
+    static CFbsBitmap* ColorDownL(CFbsBitmap * aBitmap);
+    //generates bitmap of the text using the font given
+
+    static CFbsBitmap* GetTextBitmapL( const TDesC& aText,
+                            const CFont* fontUsed,
+                            const TInt aLength = KMaxTInt );
+
+    static CFbsBitmap* GetTextBitmapL( const TDesC& aText,
+                            const CFont* fontUsed,
+                            TRgb aForeground,
+                            TRgb aBackground,
+                            TDisplayMode aDisplayMode,
+                            const TInt aLength = KMaxTInt );
+
+    //calculates min max of a greyscale bitmap in question
+    static void MinMax(CFbsBitmap * aBitmap, TInt& aMin, TInt& aMax);
+
+    /**
+    * use FGA and BGA to speed-up comparation
+    * this function only returns 255 or 0
+    * Analyses only min and max colors
+    */
+    TInt ImageDiffBinSampleL(CFbsBitmap * aBitmap1, TPoint aOrigin1,
+                 CFbsBitmap * aBitmap2);
+
+    /**
+    * Iterations like in Diff5 but metrics from Diff6
+    * Used for full word checking if Diff6 is 0 for a letter
+    * this function only returns 255 or 0
+    */
+    TInt ImageDiffBinFullL(CFbsBitmap * aBitmap1, TPoint aOrigin1,
+                 CFbsBitmap * aBitmap2);
+
+    /**
+    * use FGA and BGA to speed-up comparation and AA pixels
+    */
+    TInt ImageDiffAASampleL(CFbsBitmap * aBitmap1, TPoint aOrigin1,
+                 CFbsBitmap * aBitmap2);
+
+    /**
+    * Iterations like in Diff5 but metrics from Diff6/DiffAASample
+    * Used for full word checking if Diff6 is 0 for a letter
+    */
+    TInt ImageDiffAAFullL(CFbsBitmap * aBitmap1, TPoint aOrigin1,
+                 CFbsBitmap * aBitmap2);
+
+    /*
+    * Analyze pattern and fills in FGA and BGA sets
+    * Return ETrue if pattern is valid (non empty)
+    */
+    TBool AnalyzePatternL(CFbsBitmap * aPattern);
+
+private:
+    //algorithm parameters
+    //minimal abs avarage difference beetwen foreground and background
+    TInt iAvgDiffMin;
+    //minimal SS for foreground, with plain color should be 0
+    TInt iFgSSMin;
+    /**
+    * minimal avg diff for foreground, used in Diff3
+    */
+    TInt iFgAvgDiffMin;
+
+    //TInt64 iSeed;
+
+    //following vars set by AnalyzePatternL
+    TInt iFGAAmount;
+    TInt iBGAAmount;
+    //foreground assesment point set
+    RArray<TPoint> iFGASet;
+    //background assesment point set
+    RArray<TPoint> iBGASet;
+
+    //font color in reference image
+    TInt iMaskFgColor;//
+    //background color in reference image
+    TInt iMaskBgColor;//
+
+    //used for AA algorithm
+    //set in Sample function and used in Full function
+    //for optimization
+    TInt iTestFgColor;
+    TInt iTestBgColor;
+
+    // normalization coeff to compare test image with mask directly
+    // |iMaskFgColor-iMaskBgColor|*NormCoefAcc)/|iTestFgColor-iTestBgColor|
+    // where NormCoefAcc multiplyer is used to increase accuracy (all ints)
+    // and is implemented as shif by KNormCoefAcc bits
+    // back shift is performed after color is multiplied by iTestNormCoef
+    TInt iTestNormCoef;
+
+    /**
+    * Current recognition method
+    * Changed by SetHint
+    */
+    TInt iCurrentStrategy;
+};
+
+#endif //__HTI_TEXT_RCG_
+
+// End of file