// 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 #include #include 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; } }