#include <stdio.h>
#include <stdlib.h>

#include "def.h"
#include "image_conversion.h"
#include "bitmap_2bit.h"
#include "bitmap_8bit.h"
#include "bitmap_24bitRGB.h"

static void printSample_8bitBmp(Bitmap_8bit *bmp) {
  int i=0;
  for(i=0; i<60; i++) {
    printf("%d ", bmp->image[i]);
    if(i%10 == 9)
      printf("\n");
  }
  printf("\n");
}


void test2bit() {
  Bitmap_2bit *bwBmp = NULL;
  int i;

  bwBmp = create_bmp2bit( 640 , 480 );
  if(bwBmp == NULL) {
    perror("create_bmp2bit");
    exit(1);
  }
  
  for(i=0; i<300; i++) {
    setPixel_bmp2bit(bwBmp, i, i, i%2);
  }

  writeToFile_bmp2bit(bwBmp, "binary.pbm");
}

void test24b8b2b() {
  Bitmap_24bitRGB *rgbBmp = NULL;
  Bitmap_8bit *grayBmp  = NULL;
  Bitmap_2bit *binaryBmp = NULL;

  rgbBmp = readFromFile_bmp24bitRGB("rgbtest.ppm");
  if(rgbBmp == NULL) {
    perror("readFromFile_bmp24bitRGB");
    exit(1);
  }

  grayBmp = convert_24bitRGB_to_8bit(rgbBmp);
  if(rgbBmp == NULL) {
    perror("convert_24bitRGB_to_8bit(rgbBmp)");
    exit(1);
  }
  writeToFile_bmp8bit(grayBmp, "patterigray.pbm");

  binaryBmp = threshold_8bit(grayBmp, (unsigned char) 230);
  if(binaryBmp == NULL) {
    perror("threshold_8bit");
    exit(1);
  }

  writeToFile_bmp2bit(binaryBmp, "threshold.pbm");

}
  
void test24bitAnd8bit() {
  int i;
  Bitmap_24bitRGB *rgbBmp = NULL;
  Bitmap_8bit *grayBmp  = NULL;
  Bitmap_8bit *grayBmp2 = NULL;

  rgbBmp = create_bmp24bitRGB(640, 480);
  if(rgbBmp == NULL) {
    perror("create_bmp24bitRGB");
    exit(1);
  }

  writeToFile_bmp24bitRGB(rgbBmp, "rgbempty.ppm");

  rgbBmp = readFromFile_bmp24bitRGB("rgbtest.ppm");
  if(rgbBmp == NULL) {
    perror("readFromFile_bmp24bitRGB");
    exit(1);
  }

  grayBmp = convert_24bitRGB_to_8bit(rgbBmp);
  if(rgbBmp == NULL) {
    perror("convert_24bitRGB_to_8bit(rgbBmp)");
    exit(1);
  }

  writeToFile_bmp8bit(grayBmp, "gray.pgm");

  grayBmp2 = readFromFile_bmp8bit("gray.pgm");
  if(grayBmp2 == NULL) {
    perror("readFromFile_bmp8bit");
    exit(1);
  }

  writeToFile_bmp8bit(grayBmp2, "gray2.pgm");
}


/*
 * MAIN 
 */ 

int main() {
  //  test2bit();
  //test24bitAnd8bit();
  test24b8b2b();
}


