img.h

来自「一个google的OCR源码」· C头文件 代码 · 共 337 行

H
337
字号
/********************************************************************** * File:        img.h  (Formerly image.h) * Description: Class definition for the IMAGE class. * Author:      Ray Smith * Created:     Thu Jun 07 13:42:37 BST 1990 * * (C) Copyright 1990, Hewlett-Packard Ltd. ** 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           IMG_H#define           IMG_H#include          "memry.h"struct Pix;#define MAXIMAGEWIDTH   (900*14) /*14inch * 400dpi */                                 /*14inch * 400dpi */#define MAXIMAGEHEIGHT    (900*14)#define COMPUTE_IMAGE_XDIM(xsize,bpp) ((bpp)>8 ? ((xsize)*(bpp)+7)/8 :((xsize)+8/(bpp)-1)/(8/(bpp)))typedef inT8 (*IMAGE_OPENER) (int, inT32 *, inT32 *, inT8 *, inT8 *, inT32 *);typedef inT8 (*IMAGE_READER) (int, uinT8 *, inT32, inT32, inT8, inT32);typedef inT8 (*IMAGE_WRITER) (int, uinT8 *, inT32, inT32, inT8, inT8, inT32);typedef uinT8 *COLOUR_PIX;       //array of coloursenum COLOUR_PIX_NAME{  RED_PIX,  GREEN_PIX,  BLUE_PIX};class DLLSYM IMAGELINE;class DLLSYM IMAGE               //encapsulated image{  public:    IMAGE();  //constructor    ~IMAGE () {                  //destructor      destroy();  //free memory    }    IMAGE & operator= (          //assignment      IMAGE & source);    inT8 read_header(                    //get file header                     const char *name);  //name of image    inT8 read(                  //get rest of image              inT32 buflines);  //size of buffer    inT8 write(                    //write image               const char *name);  //name to write    inT8 create(                       //create blank image                inT32 x,               //x size required                inT32 y,               //ysize required                inT8 bits_per_pixel);  //bpp required    inT8 capture(                       //capture raw image                 uinT8 *pixels,         //pixels to capture                 inT32 x,               //x size required                 inT32 y,               //ysize required                 inT8 bits_per_pixel);  //bpp required    void destroy();  //destroy image    inT32 get_xsize() {      return xsize;    }    //access function    inT32 get_ysize() {      return ysize;    }    //access function    inT8 get_bpp() {      return bpp;    }                            //access function    inT8 get_bps() {      return bps;    }                            //bits per sample    BOOL8 white_high() {  //photo interp      return photo_interp;    }    uinT8 get_white_level() {  //access function      return (1 << bpp) - 1;    }    inT32 get_res() {      return res;    }                            //access function    void set_res(  //set resolution                 inT32 resolution) {      res = resolution;    }    uinT8 *get_buffer() {      return image;    }    //access function    uinT8 pixel(           //access pixel                inT32 x,   //x coord                inT32 y);  //y coord    void fast_get_line(                      //get image line                       inT32 x,              //coord to start at                       inT32 y,              //line to get                       inT32 width,          //no of pixels to get                       IMAGELINE *linebuf);  //line to copy to    void get_line(                     //get image line                  inT32 x,             //coord to start at                  inT32 y,             //line to get                  inT32 width,         //no of pixels to get                  IMAGELINE *linebuf,  //line to copy to                  inT32 margins);      //size of margins    void get_column(                     //get image column                    inT32 x,             //coord to start at                    inT32 y,             //line to get                    inT32 height,        //no of pixels to get                    IMAGELINE *linebuf,  //line to copy to                    inT32 margins);      //size of margins    void fast_put_line(                      //put image line                       inT32 x,              //coord to start at                       inT32 y,              //line to put                       inT32 width,          //no of pixels to put                       IMAGELINE *linebuf);  //line to copy from    void put_line(                     //put image line                  inT32 x,             //coord to start at                  inT32 y,             //line to put                  inT32 width,         //no of pixels to put                  IMAGELINE *linebuf,  //line to copy from                  inT32 margins);      //size of margins    void put_column(                     //put image column                    inT32 x,             //coord to start at                    inT32 y,             //line to put                    inT32 height,        //no of pixels to put                    IMAGELINE *linebuf,  //line to copy to                    inT32 margins);      //size of margins    void check_legal_access(              //check coords                            inT32 x,      //xcoord to check                            inT32 y,                            inT32 xext);  //ycoord to check    // Methods to convert image types. Only available if Leptonica is available.    Pix* ToPix();    void FromPix(const Pix* src_pix);    void convolver (             //Map fn over window      inT32 win_width,           //Window width      inT32 win_height,          //Window height      void (*convolve) (         //Conv Function      uinT8 ** pixels,           //Of window      uinT8 bytespp,             //1 or 3 for colour      inT32 win_wd,              //Window width      inT32 win_ht,              //Window height      uinT8 ret_white_value,     //White value to RETURN      uinT8 * result));          //Result pixel(s)                                 //copy rectangle    friend DLLSYM void copy_sub_image(IMAGE *source,  //source image                                      inT32 xstart,   //start coords                                      inT32 ystart,                                      inT32 xext,     //extent to copy                                      inT32 yext,                                      IMAGE *dest,    //destination image                                      inT32 xdest,    //destination coords //shift to match bpp                                      inT32 ydest,                                      BOOL8 adjust_grey);                                 //enlarge rectangle    friend DLLSYM void enlarge_sub_image(IMAGE *source,       //source image                                         inT32 xstart,        //scaled coords                                         inT32 ystart,                                         IMAGE *dest,         //destination image                                         inT32 xdest,         //destination coords                                         inT32 ydest,                                         inT32 xext,          //extent to copy                                         inT32 yext,                                         inT32 scale,         //scale factor                                         BOOL8 adjust_grey);  //shift to match bpp                                 //reduce rectangle    friend DLLSYM void fast_reduce_sub_image(IMAGE *source,       //source image                                             inT32 xstart,        //start coords                                             inT32 ystart,                                             inT32 xext,          //extent to copy                                             inT32 yext,                                             IMAGE *dest,         //destination image                                             inT32 xdest,         //destination coords                                             inT32 ydest,                                             inT32 scale,         //scale factor                                             BOOL8 adjust_grey);  //shift to match bpp                                 //reduce rectangle    friend DLLSYM void reduce_sub_image(IMAGE *source,       //source image                                        inT32 xstart,        //start coords                                        inT32 ystart,                                        inT32 xext,          //extent to copy                                        inT32 yext,                                        IMAGE *dest,         //destination image                                        inT32 xdest,         //destination coords                                        inT32 ydest,                                        inT32 scale,         //scale factor                                        BOOL8 adjust_grey);  //shift to match bpp  private:    inT8 bpp;                    //bits per pixel    inT8 bps;                    //bits per sample    inT8 bytespp;                //per pixel    inT8 lineskip;               //waste bytes on line    BOOL8 captured;              //true if buffer captured    inT8 photo_interp;           //interpretation    inT32 xsize, ysize;          //size of image    inT32 res;                   //resolution    uinT8 *image;                //the actual image    inT32 xdim;                  //bytes per line    inT32 bufheight;             //height of buffer    int fd;                      //open file descriptor    IMAGE_READER reader;         //reading function    inT32 ymin;                  //bottom line in mem    inT32 ymax;                  //top line in mem+1    inT8 bufread(           //read some more                 inT32 y);  //ycoord required};class DLLSYM IMAGELINE           //one line of image{  public:    uinT8 * pixels;              //image pixels    inT8 bpp;                    //bits per pixel    COLOUR_PIX operator[] (      //colour pixels    inT32 index) {      return &pixels[index * 3]; //coercion access op    }    IMAGELINE() {  //default constructor      linewidth = 0;      line = NULL;      pixels = line;      bpp = 8;    }    void init(                //setup size              inT32 width) {  //size of line      if (width <= 0)        width = MAXIMAGEWIDTH;      if (width > linewidth) {        if (line != NULL)          free_mem(line);        linewidth = width;        line = (uinT8 *) alloc_mem (linewidth * sizeof (uinT8));      }      pixels = line;      bpp = 8;    }    ~IMAGELINE () {              //destructor      if (line != NULL)        free_mem(line);    }    void set_bpp(  //For colour                 inT8 new_bpp) {      if (new_bpp <= 8)        bpp = 8;      else        bpp = 24;    }    void init() {      if (line == NULL)        init (0);      else {        pixels = line;        bpp = 8;      }    }    friend void IMAGE::get_line(                     //copies a line                                inT32 x,             //coord to start at                                inT32 y,             //line to get                                inT32 width,         //no of pixels to get                                IMAGELINE *linebuf,  //line to copy to                                inT32 margins);      //size of margins                                 //copies a column    friend void IMAGE::get_column(inT32 x,             //coord to start at                                  inT32 y,             //line to get                                  inT32 height,        //no of pixels to get                                  IMAGELINE *linebuf,  //line to copy to                                  inT32 margins);      //size of margins    friend void IMAGE::put_line(                     //writes a line                                inT32 x,             //coord to start at                                inT32 y,             //line to put                                inT32 width,         //no of pixels to put                                IMAGELINE *linebuf,  //line to copy from                                inT32 margins);      //size of margins                                 //writes a column    friend void IMAGE::put_column(inT32 x,             //coord to start at                                  inT32 y,             //line to put                                  inT32 height,        //no of pixels to put                                  IMAGELINE *linebuf,  //line to copy from                                  inT32 margins);      //size of margins                                 //may just change pointer    friend void IMAGE::fast_get_line(inT32 x,              //coord to start at                                     inT32 y,              //line to get                                     inT32 width,          //no of pixels to get                                     IMAGELINE *linebuf);  //line to copy to                                 //may just change pointer    friend void IMAGE::fast_put_line(inT32 x,              //coord to start at                                     inT32 y,              //line to get                                     inT32 width,          //no of pixels to get                                     IMAGELINE *linebuf);  //line to copy to  private:    uinT8 * line;                //local buffer    inT32 linewidth;             //width of buffer};#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?