summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/img.cc
blob: e239922dfef2414b2649149448b4eab7234e760d (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
// 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;

    yuv = hsi = false;

}


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


/// Ecrit les valeurs RGB dans un fichier
void 
Img::WriteRGB (char *filename) 
{
    FILE *file;
    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];
    yuv = mode;

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

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


/// 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 ());
    yuv = loader.getColorSpace () == ImageLoader::yuv;
}