⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pageblk.cpp

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "mfcpch.h"#include          "pageblk.h"#include    <stdio.h>#include          <ctype.h>#include          <math.h>#ifdef __UNIX__#include          <unistd.h>#else#include          <io.h>#endif#include          "hpddef.h"     //must be last (handpd.dll)#define G_START 0#define I_START 1#define R_START 3#define S_START 5extern char blabel[NUM_BLOCK_ATTR][4][MAXLENGTH];extern char backlabel[NUM_BACKGROUNDS][MAXLENGTH];ELISTIZE_S (PAGE_BLOCK)void PAGE_BLOCK::pb_delete() {   switch (pb_type) {    case PB_TEXT:      delete ((TEXT_BLOCK *) this);      break;    case PB_GRAPHICS:      delete ((GRAPHICS_BLOCK *) this);      break;    case PB_IMAGE:      delete ((IMAGE_BLOCK *) this);      break;    case PB_RULES:      delete ((RULE_BLOCK *) this);      break;    case PB_SCRIBBLE:      delete ((SCRIBBLE_BLOCK *) this);      break;    case PB_WEIRD:      delete ((WEIRD_BLOCK *) this);      break;    default:      break;  }}#define QUOTE_IT( parm ) #parmvoid PAGE_BLOCK::serialise(FILE *f) {   if (fwrite (&pb_type, sizeof (PB_TYPE), 1, f) != 1)    WRITEFAILED.error (QUOTE_IT (PAGE_BLOCK::serialise), ABORT, NULL);  switch (pb_type) {    case PB_TEXT:      ((TEXT_BLOCK *) this)->serialise (f);      break;    case PB_GRAPHICS:      ((GRAPHICS_BLOCK *) this)->serialise (f);      break;    case PB_RULES:      ((RULE_BLOCK *) this)->serialise (f);      break;    case PB_IMAGE:      ((IMAGE_BLOCK *) this)->serialise (f);      break;    case PB_SCRIBBLE:      ((SCRIBBLE_BLOCK *) this)->serialise (f);      break;    case PB_WEIRD:      ((WEIRD_BLOCK *) this)->serialise (f);      break;    default:      break;  }}PAGE_BLOCK *PAGE_BLOCK::de_serialise(FILE *f) {   PB_TYPE type;  TEXT_BLOCK *tblock;  GRAPHICS_BLOCK *gblock;  RULE_BLOCK *rblock;  IMAGE_BLOCK *iblock;  SCRIBBLE_BLOCK *sblock;  WEIRD_BLOCK *wblock;  if (fread ((void *) &type, sizeof (PB_TYPE), 1, f) != 1)    WRITEFAILED.error (QUOTE_IT (PAGE_BLOCK::serialise), ABORT, NULL);  switch (type) {    case PB_TEXT:      tblock = (TEXT_BLOCK *) alloc_struct (sizeof (TEXT_BLOCK));      return tblock->de_serialise (f);    case PB_GRAPHICS:      gblock = (GRAPHICS_BLOCK *) alloc_struct (sizeof (GRAPHICS_BLOCK));      return gblock->de_serialise (f);    case PB_RULES:      rblock = (RULE_BLOCK *) alloc_struct (sizeof (RULE_BLOCK));      return rblock->de_serialise (f);    case PB_IMAGE:      iblock = (IMAGE_BLOCK *) alloc_struct (sizeof (IMAGE_BLOCK));      return iblock->de_serialise (f);    case PB_SCRIBBLE:      sblock = (SCRIBBLE_BLOCK *) alloc_struct (sizeof (SCRIBBLE_BLOCK));      return sblock->de_serialise (f);    case PB_WEIRD:      wblock = (WEIRD_BLOCK *) alloc_struct (sizeof (SCRIBBLE_BLOCK));      return wblock->de_serialise (f);    default:      return NULL;  }}/********************************************************************** * PAGE_BLOCK::serialise_asc()  Convert to ascii file. * **********************************************************************/void PAGE_BLOCK::serialise_asc(         //convert to ascii                               FILE *f  //file to use                              ) {  serialise_INT32(f, pb_type);   switch (pb_type) {    case PB_TEXT:      ((TEXT_BLOCK *) this)->serialise_asc (f);      break;    case PB_GRAPHICS:      ((GRAPHICS_BLOCK *) this)->serialise_asc (f);      break;    case PB_RULES:      ((RULE_BLOCK *) this)->serialise_asc (f);      break;    case PB_IMAGE:      ((IMAGE_BLOCK *) this)->serialise_asc (f);      break;    case PB_SCRIBBLE:      ((SCRIBBLE_BLOCK *) this)->serialise_asc (f);      break;    case PB_WEIRD:      ((WEIRD_BLOCK *) this)->serialise_asc (f);      break;    default:      break;  }}/********************************************************************** * PAGE_BLOCK::internal_serialise_asc()  Convert to ascii file. * **********************************************************************/void PAGE_BLOCK::internal_serialise_asc(         //convert to ascii                                        FILE *f  //file to use                                       ) {  ((POLY_BLOCK *) this)->serialise_asc (f);  serialise_INT32(f, pb_type);   children.serialise_asc (f);}/********************************************************************** * PAGE_BLOCK::de_serialise_asc()  Convert from ascii file. * **********************************************************************/void PAGE_BLOCK::de_serialise_asc(         //convert from ascii                                  FILE *f  //file to use                                 ) {  PAGE_BLOCK *page_block;        //new block for list  INT32 len;                     /*length to retrive */  PAGE_BLOCK_IT it;  ((POLY_BLOCK *) this)->de_serialise_asc (f);  pb_type = (PB_TYPE) de_serialise_INT32 (f);  //      children.de_serialise_asc(f);  len = de_serialise_INT32 (f);  it.set_to_list (&children);  for (; len > 0; len--) {    page_block = new_de_serialise_asc (f);    it.add_to_end (page_block);  /*put on the list */  }}/********************************************************************** * PAGE_BLOCK::new_de_serialise_asc()  Convert from ascii file. * **********************************************************************/PAGE_BLOCK *PAGE_BLOCK::new_de_serialise_asc(         //convert from ascii                                             FILE *f  //file to use                                            ) {  PB_TYPE type;  TEXT_BLOCK *tblock;  GRAPHICS_BLOCK *gblock;  RULE_BLOCK *rblock;  IMAGE_BLOCK *iblock;  SCRIBBLE_BLOCK *sblock;  WEIRD_BLOCK *wblock;  type = (PB_TYPE) de_serialise_INT32 (f);  switch (type) {    case PB_TEXT:      tblock = new TEXT_BLOCK;      tblock->de_serialise_asc (f);      return tblock;    case PB_GRAPHICS:      gblock = new GRAPHICS_BLOCK;      gblock->de_serialise_asc (f);      return gblock;    case PB_RULES:      rblock = new RULE_BLOCK;      rblock->de_serialise_asc (f);      return rblock;    case PB_IMAGE:      iblock = new IMAGE_BLOCK;      iblock->de_serialise_asc (f);      return iblock;    case PB_SCRIBBLE:      sblock = new SCRIBBLE_BLOCK;      sblock->de_serialise_asc (f);      return sblock;    case PB_WEIRD:      wblock = new WEIRD_BLOCK;      wblock->de_serialise_asc (f);      return wblock;    default:      return NULL;  }}void PAGE_BLOCK::show_attrs(DEBUG_WIN *f) {   PAGE_BLOCK_IT it;  switch (pb_type) {    case PB_TEXT:      ((TEXT_BLOCK *) this)->show_attrs (f);      break;    case PB_GRAPHICS:      ((GRAPHICS_BLOCK *) this)->show_attrs (f);      break;    case PB_RULES:      ((RULE_BLOCK *) this)->show_attrs (f);      break;    case PB_IMAGE:      ((IMAGE_BLOCK *) this)->show_attrs (f);      break;    case PB_SCRIBBLE:      ((SCRIBBLE_BLOCK *) this)->show_attrs (f);      break;    case PB_WEIRD:      ((WEIRD_BLOCK *) this)->show_attrs (f);      break;    default:      break;  }  if (!children.empty ()) {    f->dprintf ("containing subblocks\n");    it.set_to_list (&children);    for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())      it.data ()->show_attrs (f);    f->dprintf ("end of subblocks\n");  }}PAGE_BLOCK::PAGE_BLOCK (ICOORDELT_LIST * points, PB_TYPE type, PAGE_BLOCK_LIST * child):POLY_BLOCK (points,POLY_PAGE) {  PAGE_BLOCK_IT    c = &children;  pb_type = type;  children.clear ();  c.move_to_first ();  c.add_list_before (child);}PAGE_BLOCK::PAGE_BLOCK (ICOORDELT_LIST * points, PB_TYPE type):POLY_BLOCK (points,POLY_PAGE) {  pb_type = type;  children.clear ();}void PAGE_BLOCK::add_a_child(PAGE_BLOCK *newchild) {   PAGE_BLOCK_IT c = &children;  c.move_to_first ();  c.add_to_end (newchild);}/********************************************************************** * PAGE_BLOCK::rotate * * Rotate the PAGE_BLOCK and its children **********************************************************************/void PAGE_BLOCK::rotate(  //cos,sin                        FCOORD rotation) {                                 //sub block iterator  PAGE_BLOCK_IT child_it = &children;  PAGE_BLOCK *child;             //child block  for (child_it.mark_cycle_pt (); !child_it.cycled_list ();  child_it.forward ()) {    child = child_it.data ();    child->rotate (rotation);  }  if (pb_type == PB_TEXT)    ((TEXT_BLOCK *) this)->rotate (rotation);  else    POLY_BLOCK::rotate(rotation); }/********************************************************************** * PAGE_BLOCK::move * * Move the PAGE_BLOCK and its children **********************************************************************/void PAGE_BLOCK::move(ICOORD shift  //amount to move                     ) {                                 //sub block iterator  PAGE_BLOCK_IT child_it = &children;  PAGE_BLOCK *child;             //child block  for (child_it.mark_cycle_pt (); !child_it.cycled_list ();  child_it.forward ()) {    child = child_it.data ();    child->move (shift);  }  if (pb_type == PB_TEXT)    ((TEXT_BLOCK *) this)->move (shift);  else    POLY_BLOCK::move(shift); }#ifndef GRAPHICS_DISABLEDvoid PAGE_BLOCK::basic_plot(WINDOW window, COLOUR colour) {   PAGE_BLOCK_IT c = &children;  POLY_BLOCK::plot (window, colour, 0);  if (!c.empty ())    for (c.mark_cycle_pt (); !c.cycled_list (); c.forward ())      c.data ()->plot (window, colour);}void PAGE_BLOCK::plot(WINDOW window, COLOUR colour) {   TEXT_BLOCK *tblock;  WEIRD_BLOCK *wblock;  switch (pb_type) {    case PB_TEXT:      basic_plot(window, colour);       tblock = (TEXT_BLOCK *) this;      tblock->plot (window, colour, REGION_COLOUR, SUBREGION_COLOUR);      break;    case PB_WEIRD:      wblock = (WEIRD_BLOCK *) this;      wblock->plot (window, colour);      break;    default:      basic_plot(window, colour);       break;  }}#endifvoid show_all_in(PAGE_BLOCK *pblock, POLY_BLOCK *show_area, DEBUG_WIN *f) {   PAGE_BLOCK_IT c;  INT16 i, pnum;  c.set_to_list (pblock->child ());  pnum = pblock->child ()->length ();  for (i = 0; i < pnum; i++, c.forward ()) {    if (show_area->contains (c.data ()))      c.data ()->show_attrs (f);    else if (show_area->overlap (c.data ()))      show_all_in (c.data (), show_area, f);  }}void delete_all_in(PAGE_BLOCK *pblock, POLY_BLOCK *delete_area) {   PAGE_BLOCK_IT c;  INT16 i, pnum;  c.set_to_list (pblock->child ());  pnum = pblock->child ()->length ();  for (i = 0; i < pnum; i++, c.forward ()) {    if (delete_area->contains (c.data ()))      c.extract ()->pb_delete ();    else if (delete_area->overlap (c.data ()))      delete_all_in (c.data (), delete_area);  }}PAGE_BLOCK *smallest_containing(PAGE_BLOCK *pblock, POLY_BLOCK *other) {   PAGE_BLOCK_IT c;  c.set_to_list (pblock->child ());  if (c.empty ())    return (pblock);  for (c.mark_cycle_pt (); !c.cycled_list (); c.forward ())    if (c.data ()->contains (other))      return (smallest_containing (c.data (), other));  return (pblock);}TEXT_BLOCK::TEXT_BLOCK (ICOORDELT_LIST * points, BOOL8 backg[NUM_BACKGROUNDS]):PAGE_BLOCK (points,PB_TEXT) {  int    i;  for (i = 0; i < NUM_BACKGROUNDS; i++)    background.set_bit (i, backg[i]);  text_regions.clear ();}voidTEXT_BLOCK::set_attrs (BOOL8 backg[NUM_BACKGROUNDS]) {  int i;  for (i = 0; i < NUM_BACKGROUNDS; i++)

⌨️ 快捷键说明

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