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);
};


#endif
codice:
//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;
}
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);
}
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.

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