📄 mfoutline.h
字号:
/****************************************************************************** ** Filename: mfoutline.h ** Purpose: Interface spec for fx outline structures ** Author: Dan Johnson ** History: Thu May 17 08:55:32 1990, DSJ, Created. ** ** (c) Copyright Hewlett-Packard Company, 1988. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. ******************************************************************************/#ifndef MFOUTLINE_H#define MFOUTLINE_H/**---------------------------------------------------------------------------- Include Files and Type Defines----------------------------------------------------------------------------**/#include "general.h"#include "oldlist.h"#include "fpoint.h"#include "fxdefs.h"#include "baseline.h"#define NORMAL_X_HEIGHT (0.5)#define NORMAL_BASELINE (0.0)typedef LIST MFOUTLINE;typedef enum { north, south, east, west, northeast, northwest, southeast, southwest}DIRECTION;/*typedef enum{False, True}BOOLEAN;*/typedef struct{ FPOINT Point; FLOAT32 Slope; unsigned Padding:20; BOOL8 Hidden:TRUE; BOOL8 ExtremityMark:TRUE; DIRECTION Direction:4; DIRECTION PreviousDirection:4;}MFEDGEPT;typedef enum { outer, hole}OUTLINETYPE;typedef struct{ FLOAT64 Mx, My; /* first moment of all outlines */ FLOAT64 L; /* total length of all outlines */ FLOAT64 x, y; /* center of mass of all outlines */ FLOAT64 Ix, Iy; /* second moments about center of mass axes */ FLOAT64 Rx, Ry; /* radius of gyration about center of mass axes */}OUTLINE_STATS;typedef enum { baseline, character}NORM_METHOD;/*---------------------------------------------------------------------------- Variables------------------------------------------------------------------------------*/extern int NormMethod;/**---------------------------------------------------------------------------- Macros----------------------------------------------------------------------------**/#define AverageOf(A,B) (((A) + (B)) / 2)/* macro for computing the baseline of a row of text at an x position */#define BaselineAt(L,X) (BASELINE_OFFSET)/* macro for computing the scale factor to use to normalize characters */#define ComputeScaleFactor(L) \(NORMAL_X_HEIGHT / ((is_baseline_normalized ())? \ (BASELINE_SCALE): \ ((L)->xheight)))/* macros for manipulating micro-feature outlines */#define DegenerateOutline(O) (((O) == NIL) || ((O) == rest(O)))#define PointAt(O) ((MFEDGEPT *) first (O))#define NextPointAfter(E) (rest (E))#define MakeOutlineCircular(O) (set_rest (last (O), (O)))/* macros for manipulating micro-feature outline edge points */#define PositionOf(P) ((P)->Point)#define XPositionOf(P) (PositionOf(P).x)#define YPositionOf(P) (PositionOf(P).y)#define DirectionOf(P) ((P)->Direction)#define PreviousDirectionOf(P) ((P)->PreviousDirection)#define ClearMark(P) ((P)->ExtremityMark = FALSE)#define MarkPoint(P) ((P)->ExtremityMark = TRUE)#define IsExtremity(P) ((P)->ExtremityMark)#define NotExtremity(P) (!IsExtremity(P))#define IsVisible(E) (! IsHidden(E))#define IsHidden(E) ((E)->Hidden)/**---------------------------------------------------------------------------- Public Function Prototypes----------------------------------------------------------------------------**/void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter); LIST ConvertBlob(TBLOB *Blob); MFOUTLINE ConvertOutline(TESSLINE *Outline); LIST ConvertOutlines(TESSLINE *Outline, LIST ConvertedOutlines, OUTLINETYPE OutlineType);void ComputeOutlineStats(LIST Outlines, OUTLINE_STATS *OutlineStats); void FilterEdgeNoise(MFOUTLINE Outline, FLOAT32 NoiseSegmentLength); void FindDirectionChanges(MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope);void FreeMFOutline(void *agr); //MFOUTLINE Outline);void FreeOutlines(LIST Outlines); void InitMFOutlineVars(); void MarkDirectionChanges(MFOUTLINE Outline); MFEDGEPT *NewEdgePoint(); MFOUTLINE NextExtremity(MFOUTLINE EdgePoint); void NormalizeOutline(MFOUTLINE Outline, LINE_STATS *LineStats, FLOAT32 XOrigin);void NormalizeOutlines(LIST Outlines, LINE_STATS *LineStats, FLOAT32 *XScale, FLOAT32 *YScale);void SettupBlobConversion(TBLOB *Blob); void SmearExtremities(MFOUTLINE Outline, FLOAT32 XScale, FLOAT32 YScale); /*---------------------------------------------------------------------------- Private Function Prototypes-----------------------------------------------------------------------------*/void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction); void CharNormalizeOutline(MFOUTLINE Outline, FLOAT32 XCenter, FLOAT32 YCenter, FLOAT32 XScale, FLOAT32 YScale);void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, FLOAT32 MinSlope, FLOAT32 MaxSlope);void FinishOutlineStats(register OUTLINE_STATS *OutlineStats); void InitOutlineStats(OUTLINE_STATS *OutlineStats); MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint); void UpdateOutlineStats(register OUTLINE_STATS *OutlineStats, register FLOAT32 x1, register FLOAT32 x2, register FLOAT32 y1, register FLOAT32 y2);/*#if defined(__STDC__) || defined(__cplusplus)# define _ARGS(s) s#else# define _ARGS(s) ()#endif*//* mfoutline.cvoid ComputeBlobCenter _ARGS((BLOB *Blob, TPOINT *BlobCenter));LIST ConvertBlob _ARGS((BLOB *Blob));MFOUTLINE ConvertOutline _ARGS((TESSLINE *Outline));LIST ConvertOutlines _ARGS((TESSLINE *Outline, LIST ConvertedOutlines, OUTLINETYPE OutlineType));void ComputeOutlineStats _ARGS((LIST Outlines, OUTLINE_STATS *OutlineStats));void FilterEdgeNoise _ARGS((MFOUTLINE Outline, FLOAT32 NoiseSegmentLength));void FindDirectionChanges _ARGS((MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope));void FreeMFOutline _ARGS((MFOUTLINE Outline));void FreeOutlines _ARGS((LIST Outlines));void InitMFOutlineVars _ARGS((void));void MarkDirectionChanges _ARGS((MFOUTLINE Outline));MFEDGEPT *NewEdgePoint _ARGS((void));MFOUTLINE NextExtremity _ARGS((MFOUTLINE EdgePoint));void NormalizeOutline _ARGS((MFOUTLINE Outline, LINE_STATS *LineStats, FLOAT32 XOrigin));void NormalizeOutlines _ARGS((LIST Outlines, LINE_STATS *LineStats));void SettupBlobConversion _ARGS((BLOB *Blob));void SmearExtremities _ARGS((MFOUTLINE Outline, FLOAT32 XScale, FLOAT32 YScale));#undef _ARGS*//**---------------------------------------------------------------------------- Global Data Definitions and Declarations----------------------------------------------------------------------------**/extern int NormMethod; /* normalized method currently selected */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -