Salve,
sto cercando di fare una classe in C++ per trattare immagini. Tale classe ha 5 attributi privati:
- Type: identifica il tipo di immagine
- Row: identifica il numero di righe dell'immagine
- Col: identifica il numero di colonne
- Maxval: identifica il valore massimo di ciascun pixel (solitamente 255)
- Data: è un array (o meglio un puntatore ad array) che contiene i livelli di grigio di ciascun pixel
Di seguito posto i tre file (il file .h per l'header della classe, il file .cpp per la classe ed il file .cpp per testare la classe)
codice://File MyImage.h #ifndef MYIMAGE_H#define MYIMAGE_H #include <sstream> using namespace std; class MyImage { string type; int row; int col; int maxval; int* data; public: MyImage(); MyImage(int r, int c); MyImage(string nomefile); ~MyImage(); bool Open(string nomefile); bool Save(string nomefile); }; #endifcodice://File MyImage.cpp #include "MyImage.h" #include <fstream> #include <iostream> #include <string> using namespace std; MyImage::MyImage() { } MyImage::MyImage(int r, int c) { row = r; col = c; } MyImage::MyImage(string nomefile) { type = nomefile; } MyImage::~MyImage() { delete data; } bool MyImage::Open(string nomefile) { ifstream image(nomefile.c_str()); image>>type; image>>col; image>>row; image>>maxval; int pixel[col*row]; for (int i=0; i<col*row; i++) { int num; image>>num; pixel[i] = num; } data=pixel; image.close(); return true; } bool MyImage::Save(string nomefile) { ofstream image(nomefile.c_str()); image<<type<<endl; image<<col<<endl; image<<row<<endl; image<<maxval<<endl; for (int i=0; i<col*row; i++) { int num = data[i]; image<<num<<endl; } image.close(); return true; }Il problema è essenzialmente con l'attributo "data" che, come detto, dovrebbe essere un puntatore ad un array. Infatti quando nel main provo la classe (per ora carico un'immagine e la salvo con un'altro nome) durante il metodo Open "data" contiene i valori esatti mentre durante il metodo Save "data" contiene valori del tutto sballati... come se nel metodo precedente venisse cancellato ciò che era stato salvato nell'attributo.codice:#include "MyImage.h" #include <iostream> #include <fstream> using namespace std; int main() { MyImage a; a.Open("im0.pgm"); a.Save("im.pgm"); return(0); }
Qualcuno saprebbe aiutarmi?
PS: spero che nel codice non ci sia troppa spazzatura... infatti la devo ancora sistemare e potrebbero esserci scritte cose strane in mezzo XD

Rispondi quotando
