summaryrefslogtreecommitdiffstats
path: root/conversion/test/test_bmp.cc
blob: c98712eb5d73223be8ca919f9483a919da0908fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>


#include "conversion/convertor.hh"
#include "conversion/bmp.hh"

#ifdef EARLY_TEMPLATE
#define __EXECUTABLE__
#include "raslib/template_inst.hh"
#endif

int main(int argc, char *argv[])
{
  char filename[256] = "Somewhere.bmp";
  long fsize=0;
  FILE *fp=NULL;
  char *data=NULL;
  r_Minterval interv(1);
  r_Minterval imgInterv;
  r_Conv_BMP *bmp=NULL;
  r_convDesc desc;
  r_Type *baseType=NULL;
  char *imgData=NULL;

  if (argc > 1)
    strcpy(filename, argv[1]);

  fp = fopen(filename, "rb");
  if (fp == NULL)
  {
    cerr << "Unable to open file " << filename << endl;
    exit(-1);
  }

  fseek(fp, 0, SEEK_END);
  fsize = ftell(fp);
  fseek(fp, 0, SEEK_SET);

  data = new char[fsize];
  fread(data, 1, fsize, fp);
  fclose(fp);

  interv << r_Sinterval((r_Range)0, (r_Range)fsize-1);

  cout << "Convert from BMP..." << endl;
  bmp = new r_Conv_BMP(data, interv, r_Convertor::ctype_char);
  desc = bmp->convertFrom();
  baseType = desc.destType;
  imgData = desc.dest;
  imgInterv = desc.destInterv;
  delete [] data;
  data=NULL;
  delete bmp;
  bmp=NULL;

  cout << "Convert to BMP..." << endl;
  bmp = new r_Conv_BMP(imgData, imgInterv, baseType);
  desc = bmp->convertTo("compress=1");
  fsize = desc.destInterv[0].high() - desc.destInterv[0].low() + 1;

  fp = fopen("result.bmp", "wb");
  fwrite(desc.dest, 1, fsize, fp);
  fclose(fp);

  free(desc.dest);
  desc.dest=NULL;
  delete desc.destType;
  desc.destType=NULL;
  delete bmp; 
  bmp=NULL;

  cout << "Clean up..." << endl;

  delete baseType;
  baseType=NULL;
  free(imgData);
  imgData=NULL;

  return 0;
}