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

📄 pgedit.cpp

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/********************************************************************** * pgeditor_read_file() * * Deserialise source file **********************************************************************/void pgeditor_read_file(                    //of serialised file                        STRING &name,                        BLOCK_LIST *blocks  //block list to add to                       ) {  int c;                         //input character  FILE *infp;                    //input file  BLOCK_IT block_it(blocks);  //iterator  BLOCK *block;                  //current block  ICOORD page_tr;                //topright of page  char *filename_extension;  block_it.move_to_last ();                                 // ptr to last dot  filename_extension = strrchr (name.string (), '.');  #ifdef __UNIX__  /*    TEXTROW*                tessrows;      TBLOB*                  tessblobs;      TPOINT                  tess_tr;    if (strcmp( filename_extension, ".r" ) == 0)    {      tprintf( "Converting from .r file format.\n" );      tessrows = get_tess_row_file( name.string(),	//get the row file                          &tess_tr );      page_tr = ICOORD( tess_tr.x, tess_tr.y );      make_blocks_from_rows( tessrows, name.string(),	//reconstruct blocks                    page_tr, TRUE, &block_it );    }    else if (strcmp( filename_extension, ".b" ) == 0)    {      tprintf( "Converting from .b file format.\n" );      tessblobs = get_tess_blob_file( name.string(),	//get the blob file                          &tess_tr );      page_tr = ICOORD( tess_tr.x, tess_tr.y );      make_blocks_from_blobs( tessblobs, name.string(),                              //reconstruct blocks                    page_tr, FALSE,blocks);    }     else*/  if (strcmp (filename_extension, ".pb") == 0) {    tprintf ("Converting from .pb file format.\n");                                 //construct blocks    read_and_textord (name.string (), blocks);  }  else  #endif  if ((strcmp (filename_extension, ".pg") == 0) ||    // read a .pg file                               // or a .sp file  (strcmp (filename_extension, ".sp") == 0)) {    tprintf ("Reading %s file format.\n", filename_extension);    infp = fopen (name.string (), "r");    if (infp == NULL)      CANTOPENFILE.error ("pgeditor_read_file", EXIT, name.string ());    //can't open file    while (((c = fgetc (infp)) != EOF) && (ungetc (c, infp) != EOF)) {                               //get one      block = BLOCK::de_serialise (infp);                               //add to list      block_it.add_after_then_move (block);    }    fclose(infp);  } else {    edges_and_textord (name.string (), blocks);  }}/********************************************************************** * pgeditor_show_point() * * Display the coordinates of a point in the command window **********************************************************************/void pgeditor_show_point(  //display coords                         GRAPHICS_EVENT *event) {  char msg[160];  sprintf (msg, "Pointing at (%f, %f)", event->x, event->y);  command_window->msg (msg);}/********************************************************************** *  pgeditor_write_file() * *  Serialise a block list to file * **********************************************************************/void pgeditor_write_file(                    //serialise                         char *name,         //file name                         BLOCK_LIST *blocks  //block list to write                        ) {  FILE *infp;                    //input file  BLOCK_IT block_it(blocks);  //block iterator  BLOCK *block;                  //current block  ROW_IT row_it;                 //row iterator  infp = fopen (name, "w");      //create output file  if (infp == NULL)    CANTCREATEFILE.error ("pgeditor_write_file", EXIT, name);  for (block_it.mark_cycle_pt ();  !block_it.cycled_list (); block_it.forward ()) {    block = block_it.extract ();    row_it.set_to_list (block->row_list ());    for (row_it.mark_cycle_pt (); !row_it.cycled_list (); row_it.forward ())                                 //ensure correct      row_it.data ()->recalc_bounding_box ();    block->serialise (infp);     //serialize     non-empty    block_it.add_after_then_move (block);  }  fclose(infp);}/********************************************************************** *  process_cmd_win_event() * *  Process a command returned from the command window *  (Just call the appropriate command handler) **********************************************************************/BOOL8 process_cmd_win_event(                  //UI command semantics                            INT32 cmd_event,  //which menu item?                            char *new_value   //any prompt data                           ) {  char msg[160];  BOOL8 exit = FALSE;  char response_str[MAX_CHARS + 1];  char *token;                   //first response token  switch (cmd_event) {    case NULL_CMD_EVENT:      break;    case VIEW_CMD_EVENT:      do_view_cmd();      break;    case CHANGE_DISP_CMD_EVENT:    case DELETE_CMD_EVENT:    case CHANGE_TEXT_CMD_EVENT:    case TOGGLE_SEG_CMD_EVENT:    case DUMP_WERD_CMD_EVENT:    case SHOW_POINT_CMD_EVENT:    case ROW_SPACE_STAT_CMD_EVENT:    case BLOCK_SPACE_STAT_CMD_EVENT:    case SHOW_BLN_WERD_CMD_EVENT:    case SEGMENT_WERD_CMD_EVENT:      mode = (CMD_EVENTS) cmd_event;      break;    case COPY_CMD_EVENT:      mode = (CMD_EVENTS) cmd_event;      if (!viewing_source)        command_window->msg ("Can't COPY while viewing target!");      break;    case BOUNDING_BOX_CMD_EVENT:      if (new_value[0] == 'T')        word_display_mode.turn_on_bit (DF_BOX);      else        word_display_mode.turn_off_bit (DF_BOX);      command_window->press_radio_button (modes_menu_item,        change_display_menu_item);      mode = CHANGE_DISP_CMD_EVENT;      break;    case CORRECT_TEXT_CMD_EVENT:      if (new_value[0] == 'T')        word_display_mode.turn_on_bit (DF_TEXT);      else        word_display_mode.turn_off_bit (DF_TEXT);      command_window->press_radio_button (modes_menu_item,        change_display_menu_item);      mode = CHANGE_DISP_CMD_EVENT;      break;    case POLYGONAL_CMD_EVENT:      if (new_value[0] == 'T')        word_display_mode.turn_on_bit (DF_POLYGONAL);      else        word_display_mode.turn_off_bit (DF_POLYGONAL);      command_window->press_radio_button (modes_menu_item,        change_display_menu_item);      mode = CHANGE_DISP_CMD_EVENT;      break;    case BL_NORM_CMD_EVENT:      if (new_value[0] == 'T')        word_display_mode.turn_on_bit (DF_BN_POLYGONAL);      else        word_display_mode.turn_off_bit (DF_BN_POLYGONAL);      command_window->press_radio_button (modes_menu_item,        change_display_menu_item);      mode = CHANGE_DISP_CMD_EVENT;      break;    case BITMAP_CMD_EVENT:      if (new_value[0] == 'T')        word_display_mode.turn_on_bit (DF_EDGE_STEP);      else        word_display_mode.turn_off_bit (DF_EDGE_STEP);      command_window->press_radio_button (modes_menu_item,        change_display_menu_item);      mode = CHANGE_DISP_CMD_EVENT;      break;    case UNIFORM_DISP_CMD_EVENT:      do_re_display(&word_set_display);      *current_image_changed = TRUE;      break;    case WRITE_CMD_EVENT:      do_write_file(new_value);      break;    case SMD_CMD_EVENT:      smd_cmd();      break;    case TIDY_CMD_EVENT:      if (!target_block_list.empty ()) {        viewing_source = TRUE;   //Force viewing target        do_tidy_cmd();      }      break;    case NEW_SOURCE_CMD_EVENT:      do_new_source(new_value);      break;    case IMAGE_CMD_EVENT:      display_image = (new_value[0] == 'T');      do_re_display(&word_display);      break;    case BLOCKS_CMD_EVENT:      display_blocks = (new_value[0] == 'T');      do_re_display(&word_display);      break;    case BASELINES_CMD_EVENT:      display_baselines = (new_value[0] == 'T');      do_re_display(&word_display);      break;    case REFRESH_CMD_EVENT:      do_re_display(&word_display);      break;    case QUIT_CMD_EVENT:      if (source_changed || target_changed) {        response_str[0] = '\0';        command_window->prompt ("Changes not saved. Exit anyway? (Y/N)",          response_str);        token = strtok (response_str, " ");        if (tolower (token[0]) == 'y')          exit = TRUE;      }      else        exit = TRUE;      break;    default:      if ((cmd_event >= EXTENDED_MODES_BASE) &&        (cmd_event < EXTENDED_OTHER_BASE))        mode = (CMD_EVENTS) cmd_event;      else {        if (cmd_event >= EXTENDED_OTHER_BASE)          extend_unmoded_commands (cmd_event - EXTENDED_OTHER_BASE,            new_value);        else {          sprintf (msg, "Unrecognised event " INT32FORMAT " (%s)",            cmd_event, new_value);          command_window->msg (msg);        }      }      break;  }  return exit;}/********************************************************************** * process_image_event() * * User has done something in the image window - mouse down or up.  Work out * what it is and do something with it. * If DOWN - just remember where it was. * If UP - for each word in the selected area do the operation defined by * the current mode. **********************************************************************/void process_image_event(  //action in image win                         GRAPHICS_EVENT event) {  static ICOORD down;  ICOORD up;  BOX selection_box;  char msg[80];  switch (event.type) {    case DOWN_EVENT:      down.set_x ((INT16) floor (event.x + 0.5));      down.set_y ((INT16) floor (event.y + 0.5));      if (mode == SHOW_POINT_CMD_EVENT)        show_point (current_block_list, event.x, event.y);      break;    case UP_EVENT:    case SELECT_EVENT:      if (event.type == SELECT_EVENT) {        down.set_x ((INT16) floor (event.xmax + 0.5));        down.set_y ((INT16) floor (event.ymax + 0.5));        if (mode == SHOW_POINT_CMD_EVENT)          show_point (current_block_list, event.x, event.y);      }      if (mode != SHOW_POINT_CMD_EVENT)        command_window->msg ("");//Clear old message      up.set_x ((INT16) floor (event.x + 0.5));      up.set_y ((INT16) floor (event.y + 0.5));      selection_box = BOX (up, down);      switch (mode) {        case CHANGE_DISP_CMD_EVENT:          process_selected_words(current_block_list,                                 selection_box,                                 &word_blank_and_set_display);          break;        case COPY_CMD_EVENT:          if (!viewing_source)            command_window->msg ("Can't COPY while viewing target!");          else            process_selected_words(current_block_list,                                   selection_box,                                   &word_copy);          break;        case DELETE_CMD_EVENT:          process_selected_words_it(current_block_list,                                    selection_box,                                    &word_delete);          break;        case CHANGE_TEXT_CMD_EVENT:          process_selected_words(current_block_list,                                 selection_box,                                 &word_change_text);          break;        case TOGGLE_SEG_CMD_EVENT:          process_selected_words(current_block_list,                                 selection_box,                                 &word_toggle_seg);          break;        case DUMP_WERD_CMD_EVENT:          process_selected_words(current_block_list,                                 selection_box,                                 &word_dumper);          break;        case SHOW_BLN_WERD_CMD_EVENT:          process_selected_words(current_block_list,                                 selection_box,                                 &word_bln_display);          break;        case SEGMENT_WERD_CMD_EVENT:          re_segment_word(current_block_list, selection_box);          break;        case ROW_SPACE_STAT_CMD_EVENT:          row_space_stat(current_block_list, selection_box);          break;        case BLOCK_SPACE_STAT_CMD_EVENT:          block_space_stat(current_block_list, selection_box);          break;        case SHOW_POINT_CMD_EVENT:          break;                 //ignore up event        default:          if ((mode >= EXTENDED_MODES_BASE) && (mode < EXTENDED_OTHER_BASE))            extend_moded_commands (mode - EXTENDED_MODES_BASE, selection_box);          else {            sprintf (msg, "Mode %d not yet implemented", mode);            command_window->msg (msg);          }          break;      }    default:      break;  }}/********************************************************************** * re_scale_and_move_bln_word() * * Scale and move a bln word so that it fits in a specified bounding box.

⌨️ 快捷键说明

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