reference/ocr-simple/BitMap.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
 /* *****************************************************************
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
  * BitMap.cc - Member functions for a BitMap                      *
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
  *  because of the complexity of the many Bit functions, they are  *
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
  *  not all in this file.  In this file are only the following     *
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
  *  functions:
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
  *	BitMap() - Constructor
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
  *     ~BitMap() - Destructor
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
  *
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
  *	int imageLength();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
  *	int imageWidth();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    12
  *	MapStatus & status;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    13
  *   	MapStatus readMap(char * filename) ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    14
  *	MapStatus writeMap(char * filename);
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
  *	// Data Access and low level manipulation functions  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
  *      uchar * row(int i) - Returns a pointer to row i    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
  *	 MapStatus setBit(Point point, Color clr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
  *	 Color readBit(Point point);
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
  *
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
   ***************************************************************/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
#include "BitMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
#include <iostream.h>
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
#include <stdio.h>
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
#include "status_message.h"
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
inline int set_pixel_value(uchar** new_data, int y, int x, int new_val)
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
  new_data[y][x/8] |= (uchar)(new_val << (7-(x%8)));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
inline int get_pixel_value(uchar** data, int y, int x)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
  if((data[y][x/8]) & (1 << (7 - (x%8))))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
    return 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
  else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
    return 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
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
BitMap::BitMap()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
:fImageWidth(0), fImageLength(0), fStatus(EMPTY), fMapData(NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
Primary Function: Constructor
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
Return Value: pointer to new BitMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
Effects: Initialize status to empty other values to zero
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
Rev: 10/6/95  KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
{ };
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
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
 BitMap::~BitMap()
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
Primary Purpose: destructor
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
Effects: Deletes each row of BitPairs then the array of rows
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
Rev: 10/6/95   KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
---------------------------------------------------------------*/
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
  if (fMapData != NULL)
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
      int i;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    65
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    66
      // delete each row
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
      for (i=0; i< fImageLength; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
	delete fMapData[i];
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
      // delete array of rows
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
        delete fMapData;   
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
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    77
uchar * BitMap::row(int i)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    78
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
Primary Purpose:  Access a row of the BitMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
Arguments: i is the row to access
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
Constraints:  i < fImageLength
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
Rev:  KM 10/15
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
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    85
  return fMapData[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    86
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
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    89
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    90
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    91
MapStatus BitMap::readMap(char * filename)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    92
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    93
Primary Purpose: Read an BitMap from a TIFF file
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    94
Arguments: filename of TIFF file
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    95
Return Value: A MapStatus, either VALID or READERROR
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    96
Effects:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    97
  *  BitMap::readMap(filename) will read a two level TIFF file
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    98
  *  and place it in an BitMap.  The private fields of the BitMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    99
  *  set are:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   100
         fImageWidth - the pixel width of the image
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   101
	 fImageLength - the vertical pixel length of the image
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   102
	 fstat - the status after the Read VALID, OTHERERROR,READERROR
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   103
         fMapData - an array of pointers to uchar arrays/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   104
Constraints: filename must be a two level TIFF file
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   105
Rev: 10/15/95  KM Portions Borrowed from Assignment 1
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   106
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   107
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   108
  TIFF *tif;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   109
  short photometric;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   110
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   111
  // Open File - Read length and width
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
  tif = TIFFOpen (filename, "r");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   114
  if(tif == NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   115
    { fStatus= OPENERROR;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   116
      return OPENERROR;
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
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   119
  TIFFGetField (tif, TIFFTAG_IMAGELENGTH, &fImageLength);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   120
  TIFFGetField (tif, TIFFTAG_IMAGEWIDTH, &fImageWidth);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   121
  TIFFGetField (tif, TIFFTAG_PHOTOMETRIC, &photometric);
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
  fMapData = new (uchar *)[fImageLength];
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
  printf("open succeeded on file %s.  length = %d. width = %d\n",
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   126
	 filename, fImageLength, fImageWidth);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   127
  /*  if(photometric == PHOTOMETRIC_MINISWHITE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   128
       printf("min-is-white format\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   129
  else if(photometric == PHOTOMETRIC_MINISBLACK )
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   130
    printf("min-is-black format\n"); */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   131
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   132
  if((photometric != PHOTOMETRIC_MINISWHITE) && 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   133
     (photometric != PHOTOMETRIC_MINISBLACK))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   134
    printf("with an unknown(!) photometric: %d\n", photometric);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   135
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   136
  // Calculate number of chars in a row
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   137
  int numChars = (fImageWidth / 8 ) +1 ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   138
  if(ENABLE_USER_INTERFACE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   139
    set_status("Reading %s...", filename);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   140
  last_status = 0.0;
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
  for (int row = 0; row < fImageLength; ++row)
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
      if(ENABLE_USER_INTERFACE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   145
	set_read_status(row, fImageLength);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   146
      fMapData[row] = new uchar[numChars];        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   147
      fMapData[row][numChars - 1] = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   148
      TIFFReadScanline(tif,fMapData[row],row,0);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   149
      if(photometric != PHOTOMETRIC_MINISWHITE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   150
	invertBitsInBuffer(fMapData[row], numChars);
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
  last_status = 0.0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   154
  if(ENABLE_USER_INTERFACE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   155
    set_status("Done reading %s", filename);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   156
  TIFFClose(tif);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   157
  fStatus = VALID; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   158
  return VALID;
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
};
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
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   163
MapStatus BitMap::writeTclMap(char * filename, 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   164
			      Point & ul, Point & lr, int scaledown)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   165
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   166
  FILE *  outfile;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   167
  int numChars= fImageWidth /8 + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   168
  outfile = fopen(filename, "w");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   169
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   170
  if(!outfile)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   171
    cout << " Could not open " << filename << endl;
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
  fprintf(outfile, "%s_width %d\n",filename,fImageWidth);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   174
  fprintf(outfile, "%s_height %d\n",filename,fImageLength);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   175
  fprintf(outfile, "static char %s_bits[] {\n",filename);
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
  for (int r = 0; r < fImageLength; r++)
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
	for(int col=0; col < numChars; col++)
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
	      fprintf(outfile, "%4#x,", fMapData[r][col]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   183
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   184
	      if (!(r == fImageLength-1 && col == numChars-1))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   185
		fprintf(outfile, " ,");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   186
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   187
	      if (((r*numChars + col) % 15)==0)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   188
		fprintf(outfile,"\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   189
	    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   190
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   191
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   192
  fprintf(outfile,"}\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   193
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   194
  fclose(outfile);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   195
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   196
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   197
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   198
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   199
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   200
short int BitMap::grayScale(Point & ul, Point & lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   201
// Dummy function for now
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   202
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   203
   int numPixels = pixelsInRegion( ul, lr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   204
   int area = (lr.x() - ul.x()+1) * (lr.y() - ul.y()+1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   205
   if (area < numPixels) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   206
     printf("Uh oh! Area = %d and pixels = %d\n", area, numPixels);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   207
     assert(area >= numPixels);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   208
   }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   209
   short int gscale =(short int)(((float)numPixels/area) * 255);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   210
   
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   211
   return gscale;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   212
 };
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   213
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   214
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   215
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   216
int BitMap::pixelsInRegion( Point  ul,  Point lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   217
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   218
  assert (ul >= Point(0,0));  /* did someone overload these? */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   219
  if (!(lr <= Point(fImageWidth, fImageLength))) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   220
       printf("problem\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   221
  assert (lr <= Point(fImageWidth, fImageLength));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   222
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   223
  if(ul > lr)return 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   224
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   225
  int ulx = ul.x(); int uly = ul.y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   226
  int lrx = lr.x(); int lry = lr.y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   227
  uchar * curRow;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   228
  int pixCount = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   229
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   230
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   231
  for(int r = uly; r <= lry; r++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   232
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   233
      curRow = row(r);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   234
      // Count middle (whole) characters
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   235
      pixCount += pixelsBetween(curRow, ulx, lrx);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   236
//      cout << pixelsBetween(curRow,ulx,lrx) <<" ";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   237
//      cout << pixCount << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   238
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   239
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   240
  return pixCount;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   241
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   242
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   243
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   244
void testBitMap(char * filename)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   245
// Reads in BitMap and prints on screen
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   246
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   247
    BitMap * m = new BitMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   248
    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   249
    m->readMap(filename);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   250
    int numChars = (m->imageWidth() / 8 )+ 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   251
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   252
    for (int r = 0; r < m->imageLength(); r++){
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   253
      for (int c =0; c < numChars; c++) byteprint(m->row(r)[c]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   254
    printf( "\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   255
  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   256
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   257
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   258
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   259
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   260
void byteprint(char d) // print bits in a byte, high bit on left
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   261
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   262
  for (int i= 7; i>=0; --i) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   263
    if ((d>>i)&1) printf("X");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   264
    else printf(" ");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   265
  } 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   266
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   267
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   268
void bitprint(char d, int x)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   269
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   270
  if ((d>>(7-x))&1) cout << "X";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   271
  else cout << " ";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   272
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   273
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   274
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   275
class Page;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   276
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   277
void testPixelsInRegion(BitMap * bmap, RLEMap * rmap)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   278
// Reads in file and compares pixelsInRegion to RLEVersion
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   279
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   280
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   281
  int bmapcnt, rmapcnt;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   282
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   283
  cout << "Testing pixelsInRegion " << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   284
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   285
   bmapcnt = bmap->pixelsInRegion(Point(0,0), 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   286
		Point(bmap->imageWidth()-1, bmap->imageLength()-1));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   287
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   288
   rmapcnt = rmap->pixelsInRegion(Point(0,0), 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   289
	 Point(rmap->imageWidth()-1, rmap->imageLength()-1));				     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   290
				     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   291
  cout << "For whole page:";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   292
  cout <<" Bitmap-" << bmapcnt << " RLEMap-" << rmapcnt << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   293
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   294
  cout << "Start on char edge end on edge (8,8) (16,21) ";  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   295
   bmapcnt = bmap->pixelsInRegion(Point(8,8), Point(16,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   296
   rmapcnt = rmap->pixelsInRegion(Point(8,8), Point(16,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   297
  cout <<" Bitmap-" << bmapcnt << " RLEMap-" << rmapcnt << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   298
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   299
  cout << "Start on char edge, end mid char (0,8) (50,21)";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   300
   bmapcnt = bmap->pixelsInRegion(Point(0,8), Point(50,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   301
   rmapcnt = rmap->pixelsInRegion(Point(0,8), Point(50,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   302
  cout <<" Bitmap-" << bmapcnt << " RLEMap-" << rmapcnt << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   303
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   304
  cout << "Start mid char, end on edge (2,8) (7,21)";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   305
   bmapcnt = bmap->pixelsInRegion(Point(2,8), Point(7,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   306
   rmapcnt = rmap->pixelsInRegion(Point(2,8), Point(7,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   307
  cout <<" Bitmap-" << bmapcnt << " RLEMap-" << rmapcnt << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   308
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   309
  cout << "Start mid char, end mid char (2,8) (9,21)";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   310
   bmapcnt = bmap->pixelsInRegion(Point(2,8), Point(9,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   311
   rmapcnt = rmap->pixelsInRegion(Point(2,8), Point(9,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   312
  cout <<" Bitmap-" << bmapcnt << " RLEMap-" << rmapcnt << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   313
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   314
  cout << "Start and, end same char (2,8) (4,21)";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   315
   bmapcnt = bmap->pixelsInRegion(Point(2,4), Point(4,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   316
   rmapcnt = rmap->pixelsInRegion(Point(2,4), Point(4,21));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   317
  cout <<" Bitmap-" << bmapcnt << " RLEMap-" << rmapcnt << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   318
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   319
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   320
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   321
MapStatus BitMap::rotateMap(Angle angle) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   322
/* 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   323
   Thanks to Clint Staley and S. Jacques @calpoly 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   324
   for this bitmap rotation alg.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   325
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   326
   copied and slightly modified since it wass a pain getting
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   327
   the RLE rotate to work and I think this might be decently
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   328
   fast -AR
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   329
*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   330
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   331
  int nx,ny,newheight,newwidth,oldheight,oldwidth,i,j,halfnewheight,halfnewwidth;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   332
  int halfoldheight,halfoldwidth;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   333
  double radians; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   334
  double cosval,sinval;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   335
  uchar** newMapData;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   336
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   337
  fprintf(stderr,"Rotating Image %lf Degrees\n",angle);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   338
  radians =  -(angle) / ((180 / 3.142));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   339
  cosval = cos(radians);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   340
  sinval = sin(radians);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   341
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   342
  oldheight = fImageLength;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   343
  oldwidth = fImageWidth;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   344
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   345
  newwidth = (int)abs((int)(oldwidth*cosval)) + (int)abs((int)(oldheight*sinval));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   346
  newheight = (int)abs((int)(-oldwidth*sinval)) + (int)abs((int)(oldheight*cosval));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   347
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   348
  halfnewheight = newheight / 2;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   349
  halfnewwidth = newwidth / 2;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   350
  halfoldwidth = oldwidth /2;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   351
  halfoldheight = oldheight /2 ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   352
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   353
  newMapData = new (uchar*) [newheight];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   354
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   355
  int num_chars = (newwidth / 8) + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   356
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   357
  for (int row = 0; row < newheight; ++row)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   358
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   359
	newMapData[row] = new uchar[num_chars];        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   360
	for (int k = 0; k < num_chars; k++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   361
	  newMapData[row][k] = '\0';
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   362
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   363
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   364
  last_status = 0.0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   365
  for(i=0;i < newheight;i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   366
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   367
	if(ENABLE_USER_INTERFACE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   368
	  set_rotation_status((int)i, (int)newheight);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   369
	for(j=0;j < newwidth;j++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   370
	    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   371
	     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   372
/*	      set_pixel_value(newMapData, i, j, 0); 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   373
	      break;  */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   374
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   375
	      nx =(int)( (j - halfnewwidth)*cosval + (i-halfnewheight)*sinval);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   376
	      ny =(int)( -((j - halfnewwidth)*sinval) + (i - halfnewheight)*cosval);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   377
	      nx = nx + halfoldwidth;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   378
	      ny = ny + halfoldheight;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   379
	      if ((nx < oldwidth) && (ny < oldheight) && (nx > 0) && (ny > 0))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   380
		{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   381
		  if(get_pixel_value(fMapData, ny, nx))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   382
		    set_pixel_value(newMapData, i, j, 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   383
		  else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   384
		    set_pixel_value(newMapData, i, j, 0);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   385
		}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   386
	      else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   387
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   388
		    set_pixel_value(newMapData, i, j, 0);		
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   389
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   390
	    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   391
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   392
  if(ENABLE_USER_INTERFACE)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   393
    set_status("Rotating Image: Done");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   394
  last_status = 0.0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   395
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   396
/* free up the old storage */  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   397
  for(i = 0; i < fImageLength; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   398
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   399
	free(fMapData[i]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   400
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   401
  free(fMapData);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   402
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   403
/* assign pointer, etc to the new stuff */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   404
  fMapData = newMapData;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   405
  fImageLength = newheight;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   406
  fImageWidth = newwidth;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   407
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   408
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   409
/*
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   410
				
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   411
int set_pixel_value(uchar** new_data, int y, int x, int new_val)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   412
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   413
  new_data[y][x/8] |= (uchar)(new_val << (7-(x%8)));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   414
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   415
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   416
int get_pixel_value(uchar** data, int y, int x)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   417
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   418
  if((data[y][x/8]) & (1 << (7 - (x%8))))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   419
    return 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   420
  else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   421
    return 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   422
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   423
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   424
*/  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   425
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   426
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   427
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   428
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   429
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   430
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   431
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   432
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   433