00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _GOCR_IMAGE_H
00023 #define _GOCR_IMAGE_H
00024
00025 #ifndef _GOCR_MODULE_H
00026 # error "Do not call gocr_gui.h directly; call gocr_module.h instead."
00027 #endif.
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00045 #define GOCR_BLACK 0
00046
00050 #define GOCR_WHITE 1
00051
00052
00056 enum gocr_imagetype {
00057 GOCR_NONE,
00058 GOCR_BW,
00059 GOCR_GRAY,
00060 GOCR_COLOR,
00061 GOCR_OTHER
00062 };
00066 typedef enum gocr_imagetype gocr_ImageType;
00067
00074 struct gocr_pixelbw {
00075 unsigned char value : 1;
00076 unsigned char mark1 : 1;
00077 unsigned char mark2 : 1;
00078 unsigned char mark3 : 1;
00079 unsigned char isblock : 1;
00080 unsigned char ischar : 1;
00081 unsigned char private1 : 1;
00082 unsigned char private2 : 1;
00083 };
00087 typedef struct gocr_pixelbw gocr_PixelBW;
00088
00089 struct gocr_pixelgray {
00090 unsigned char pad : 1;
00091 unsigned char mark1 : 1;
00092 unsigned char mark2 : 1;
00093 unsigned char mark3 : 1;
00094 unsigned char isblock : 1;
00095 unsigned char ischar : 1;
00096 unsigned char private1 : 1;
00097 unsigned char private2 : 1;
00099 unsigned char value;
00100 };
00101 typedef struct gocr_pixelgray gocr_PixelGray;
00102
00103 struct gocr_pixelcolor {
00104 unsigned char pad : 1;
00105 unsigned char mark1 : 1;
00106 unsigned char mark2 : 1;
00107 unsigned char mark3 : 1;
00108 unsigned char isblock : 1;
00109 unsigned char ischar : 1;
00110 unsigned char private1 : 1;
00111 unsigned char private2 : 1;
00113 unsigned char value[3];
00114 };
00115 typedef struct gocr_pixelcolor gocr_PixelColor;
00116
00117
00124 struct gocr_pixel {
00125 unsigned char pad : 1;
00126 unsigned char mark1 : 1;
00127 unsigned char mark2 : 1;
00128 unsigned char mark3 : 1;
00129 unsigned char isblock : 1;
00130 unsigned char ischar : 1;
00131 unsigned char private1 : 1;
00132 unsigned char private2 : 1;
00134 char value[0];
00135 };
00136 typedef struct gocr_pixel gocr_Pixel;
00137
00144 struct gocr_image {
00145 char *filename;
00146 int width, height;
00147 gocr_ImageType type;
00149 union {
00150 gocr_Pixel **pix;
00151 gocr_PixelBW **bw;
00152 gocr_PixelGray **gray;
00153 gocr_PixelColor **color;
00154 } data;
00155
00156
00157 unsigned char *mask;
00158 int threshold;
00159 int sons;
00160 struct gocr_image *parent;
00161 };
00162
00166 typedef struct gocr_image gocr_Image;
00167
00168
00169 extern void gocr_imageFree ( gocr_Image *image );
00170 extern int gocr_imageWrite ( gocr_Image *image, char *filename );
00171 extern int gocr_mainImageWriteWithData ( char *filename );
00172
00173
00174 extern inline int gocr_pixelGetMark1 ( gocr_Image *image, int x, int y );
00175 extern inline int gocr_pixelSetMark1 ( gocr_Image *image, int x, int y, char value );
00176 extern inline int gocr_pixelGetMark2 ( gocr_Image *image, int x, int y );
00177 extern inline int gocr_pixelSetMark2 ( gocr_Image *image, int x, int y, char value );
00178 extern inline int gocr_pixelGetMark3 ( gocr_Image *image, int x, int y );
00179 extern inline int gocr_pixelSetMark3 ( gocr_Image *image, int x, int y, char value );
00180
00181 #define gocr_isblock(image, x, y) \
00182 ((gocr_Pixel *)((image)->data.pix[y]+(x)*_gocr_imagePixelSize(image)))->isblock
00183 #define gocr_ischar(image, x, y) \
00184 ((gocr_Pixel *)((image)->data.pix[y]+(x)*_gocr_imagePixelSize(image)))->ischar
00185
00186
00187 extern void gocr_imagePixelSetBW ( gocr_Image *image, int x, int y,
00188 unsigned char data );
00189 extern unsigned char gocr_imagePixelGetBW ( gocr_Image *image, int x, int y );
00190 extern void gocr_imagePixelSetGray ( gocr_Image *image, int x, int y,
00191 unsigned char data );
00192 extern unsigned char gocr_imagePixelGetGray ( gocr_Image *image, int x, int y );
00193 extern void gocr_imagePixelSetColor ( gocr_Image *image, int x, int y,
00194 unsigned char data[3] );
00195 extern unsigned char *gocr_imagePixelGetColor ( gocr_Image *image, int x, int y );
00196
00199 #ifdef _GOCR_INTERNAL_H
00200
00201 extern int _gocr_imageLoad ( const char *filename, void *data );
00202 extern size_t _gocr_imagePixelSize ( gocr_Image *image );
00203 extern int _gocr_thresholdGrayToBW ( gocr_Image *image );
00204
00205 #define _gocr_private1(image, x, y) \
00206 ((gocr_Pixel *)((image)->data.pix[y]+(x)*_gocr_imagePixelSize(image)))->private1
00207 #define _gocr_private2(image, x, y) \
00208 ((gocr_Pixel *)((image)->data.pix[y]+(x)*_gocr_imagePixelSize(image)))->private2
00209 #define _gocr_maskGet(img, x, y) \
00210 !!(img->mask[(((y)*(img)->width+(x))>>3)]&(((y)*img->width+(x))%8))
00211 #define _gocr_maskSet(img, x, y, v) \
00212 img->mask[(((y)*(img)->width+(x))>>3)] &= ((v)&(1<<((y)*img->width+(x))%8))
00213 #endif
00214
00221 extern gocr_Image *currentimage;
00222
00223 #ifdef __cplusplus
00224 }
00225 #endif
00226
00227 #endif