reference/ocr-simple/convertMap.cc
author viric@llimona
Thu, 18 May 2006 23:12:51 +0200
changeset 0 6b8091ca909a
permissions -rw-r--r--
Init from working directory of svn repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     1
/**  convertMap.h
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
Functions for converting  from one Map form to another 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
and extracting smaller maps. There are four polymorphic
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
functions.   The general format is
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     6
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     7
convertMap(MapType * source,MapType * target, Point ul, Point lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
MapTypes can be - BitMap or  RLEMap,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
source - the map to be converted from
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
target - The map to be converted to.  Memory will be allocated
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    12
         for target's contents. 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    13
ul and lr mark a range to copy.   If both are the global var NOPNT 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    14
the entire map will  be copied.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    15
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    16
Functions return a MapStatus which will be VALID or OTHERERROR
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
if there was an error in the conversion.  An error might be due
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
to a user specifying an out of range ul and lr
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    20
**************************************************************/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    21
#include "system.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
#include "Point.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
#include "BitMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
#include "RLEMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
#include "convertMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
/****  BitMap Conversion ***/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    28
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    29
MapStatus convertMap(BitMap * source,  RLEMap * target, Point ul, Point lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    30
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    31
Primary Purpose:  Convert a bitMap to a RLEMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
Arguments:    Right now just does full bit map coversion ul/lr dont work
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
Return Value: Returns valid if copy did not encounter any errors.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
Effects:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
Constraints: target is a pointer to an RLEMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
Rev: 10/24/95
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
  uchar * rowdata;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
  int numChars;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    42
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    43
  assert(target != NULL);  // target must be allocated with new RLEMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
                          // before being passed to this function.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
  assert(source !=NULL);  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
  target->imageWidth() = source->imageWidth();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
  target->imageLength() = source->imageLength();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
  target->status() = source->status();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
  target->fMapData = new (RLEPairs*)[target->imageLength()]; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
  for (int i = 0; i < source->imageLength(); i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    52
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    53
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    54
      numChars= source->imageWidth() /8 + 1;  // number of char entries
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
      // Create a list of RLEPairs for this row and fill with buffer data
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    56
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    57
      rowdata = source->row(i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
      target->fMapData[i] = new RLEPairs(i);  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
      target->fMapData[i]->fill(rowdata, numChars, i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    61
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    62
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    63
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    64
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    65
return VALID;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    66
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    69
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    70
/**** RLEMap Conversion   ***/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
MapStatus convertMap(RLEMap * source,  BitMap * target, Point ul, Point lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    72
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    73
Purpose: Converts an RLEMap to a BitMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
Arguments:    Right now just does full bit map coversion ul/lr dont work
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
Return Value: Returns valid if copy did not encounter any errors.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
Effects:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    77
Constraints: target is a pointer to a BitMap which must be previously
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    78
allocated with new BitMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
Rev: 10/24/95
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    83
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    84
  RLEPairs * rmapRowData;     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    85
  RLEPair * item;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    86
  int numChars,startX,endX;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    87
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    88
  assert(target != NULL);  // target must be allocated with new BitMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    89
                          // before being passed to this function.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    90
  assert(source !=NULL);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    91
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    92
  target->imageWidth() = source->imageWidth();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    93
  target->imageLength() = source->imageLength();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    94
  target->status() = source->status();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    95
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    96
  target->fMapData = new (uchar *)[target->imageLength()]; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    97
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    98
 for (int i = 0; i < source->imageLength(); i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    99
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   100
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   101
      numChars= source->imageWidth() /8 + 1;  // number of char entries
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   102
      // Convert RLEPairs to uchar array
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   103
      rmapRowData = source->row(i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   104
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   105
      target->fMapData[i] = new uchar[numChars];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   106
      for(int j=0; j < numChars; j++)target->fMapData[i][j] = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   107
      // convert this row from RLE to uchars
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   108
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   109
      ListElement *ptr = rmapRowData->first;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   110
      if (ptr == NULL) cout << "0" << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   111
      for (; ptr != NULL; ptr = ptr->next) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   112
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   113
	  item = (RLEPair *)(ptr->item);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   114
	  startX = item->start;	  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   115
          endX = item->end;	  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   116
	  setRange(target->fMapData[i],  startX, endX);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   117
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   118
      cout << endl << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   119
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   120
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   121
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   122
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   123
return VALID;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   124
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   125
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   126
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   127
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   128
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   129
//MapStatus convertMap(RLEMap * source,  RLEMap * target, Point ul, Point lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   130
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   131
Primary Purpose:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   132
Arguments:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   133
Return Value:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   134
Effects:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   135
Constraints:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   136
Rev:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   137
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   138
//{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   139
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   140
//return EMPTY;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   141
//}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   142
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   143
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   144
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   145
void testConvertMap(char * filename)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   146
// Reads in BitMap and converts to RLEMap then prints on screen
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   147
// Next converts back to BitMap, back to RLEMap and prints
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   148
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   149
    BitMap * m = new BitMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   150
    RLEMap * rm = new RLEMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   151
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   152
   
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   153
    m->readMap(filename);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   154
    convertMap(m,rm);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   155
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   156
    cout << "length chk " << m->imageLength()<< "==" << rm->imageLength()<< endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   157
    cout << "width chk " << m->imageWidth()<< "==" << rm->imageWidth() << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   158
    cout << "status chk"<<m->status() << "==" << rm->status() << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   159
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   160
    printMap(rm);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   161
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   162
    // Now test conversion the other way
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   163
    delete m;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   164
    m = new BitMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   165
    convertMap(rm,m);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   166
    delete rm;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   167
    rm = new RLEMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   168
    convertMap(m,rm);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   169
    printMap(rm);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   170
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   171
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   172
} 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   173
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   174
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   175
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   176
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   177
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   178
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   179
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   180
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   181
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   182
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   183