summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/img.cc
blob: 2e5bc875f975d38b470884f255e5aae6ebe6017c (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
84
85
86
87
88
89
90
91
92
93
94
// img.cc - Classe Image
// nono - Programme du robot Efrei Robotique I1-I2 2004
// Copyright (C) 2004 Olivier Gaillard

/// @file img.cc Chargement des images, conversion en YUV, HSI, detection des contours, transformation d'une image segmentee en RGB, ecriture de l'image sur le disque

#include "img.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;


/// Constructeur
Img::Img (void)
{
    // Initialisation des variables
    tabData = NULL;
    tabSegm = NULL;

}


/// Destructeur
Img::~Img (void)
{
    //free tabData
    delete [] tabData;
}


/// Ecrit les valeurs RGB dans un fichier
void 
Img::WriteRGB (char *filename) 
{
    FILE *file;
    colorMode = RGB;

    file = fopen(filename, "w+");

    fwrite(tabData, 3, width*height, file);
    
    fclose(file);
}


/// Charge les valeurs RGB dans un fichier
void 
Img::LoadRGB (char *filename, int mode, int width, int height) 
{
    this->width = width;
    this->height = height;
    nbPixels = width * height;
    delete[] tabData;
    tabData = new unsigned char[nbPixels*3];

    FILE *file;
    file = fopen(filename, "r");

    fread(tabData, 3, width*height, file);
    
    fclose(file);
    colorMode = RGB;
}


/// Lit une image depuis un ImageLoader.
void
Img::load (ImageLoader &loader)
{
    delete[] tabData;
    loader.getSize (width, height);
    nbPixels = width * height;
    tabData = new unsigned char[loader.getBufSize ()];
    loader.read (tabData, loader.getBufSize ());
    
    switch (loader.getColorSpace ())
      {
      case ImageLoader::yuv:
	colorMode = YUV;
	break;
      case ImageLoader::rgb:
	colorMode = RGB;
	break;
      case ImageLoader::bgr:
	colorMode = BGR;
	break;
      case ImageLoader::yuv422:
	///XXX XXX XXX
	break;
      }
}