Datei.ppm einlesen C++

hsma2510

Grünschnabel
Heyy.. die Datei die ich öffnen möchte, öffnet sich leider nicht.

Hier mein Code.
Main
C++:
#include <iostream>
#include "ppm.h"

using namespace std;

int main() {

    SImage img;

    img = readPPM("lena2.ppm");
    
    return 0;


}

ppm.cpp

C++:
#include "ppm.h"

using namespace std;

// Einlesen der Bilder
SImage readPPM(const char *const filename){

    SImage image;

    fstream in;

    in.open(filename, ios::in);

    if(!in.is_open()){

        cout << "Konte Datei nicht oeffnen" << endl;

        return image;}

        getline(in, image.format);

        if(image.format != "P6"){

    cout << "ungueltiges Dateiformat!" << endl;

    return image;
        }

    getline(in, image.comment);

        in >> image.cols;
        in >> image.rows;

        cout << "Anzahl der Pixel: " << image.cols*image.rows << endl;

        in >> image.maxValue;

        // Groesse des Vektors anpassen
        image.grayvalues.resize(image.cols*image.rows);
        // Einlesen der Grauwerte in einer Schleife ueber alle Pixel

        for(unsigned int i = 0; i < image.cols*image.rows;i++){

            in >> image.grayvalues[i];


        }

        // Ueberpruefen der Anzahl der gelesenen Werte

        if(image.cols*image.rows != image.grayvalues.size()){

            cout << "Konnte nicht alle Pixel lesen" << endl;
        }else{

        cout << "Alle Pixel eingelesen" << endl;

        }

        return image;

    }

//Abfrage eines Grauwertes
short getGrayval(const SImage,unsigned int r, unsigned int c);
// Setzen eines Grauwertes

void setGrayval(SImage &img, unsigned int r, unsigned int c, short val);

// Schreiben einer Bilddatei

int writePPM(const SImage image, const std::string filename);


ppm.h

C++:
#include <string>
#include <vector>
#include <iostream>
#include <fstream>

#ifndef AUFGABENBLATT2_AUFGABE1_PPM_H
#define AUFGABENBLATT2_AUFGABE1_PPM_H

#endif //AUFGABENBLATT2_AUFGABE1_PPM_H

struct SImage{

    unsigned int rows; // zeilen
    unsigned int cols; // spalten
    unsigned maxValue; // grauWert im Bild
    std::string format; // zeichenkette für dateiformat
    std::string comment; // für kommentar
    std::vector<short> grayvalues; // Vektor für Grauwerte des Bildes
};

// Einlesen der Bilder
SImage readPPM(const char *const filename);

//Abfrage eines Grauwertes
short getGrayval(const SImage,unsigned int r, unsigned int c);

// Setzen eines Grauwertes
void setGrayval(SImage &img, unsigned int r, unsigned int c, short val);

// Schreiben einer Bilddatei
int writePPM(const SImage image, const std::string filename);
 

hsma2510

Grünschnabel
Ich habe eine if-Abfrage ob die Datei geoeffnet wurde.

Die Meldung ist dann


cout << "Konnte Datei nicht oeffnen" << endl;
 

Jennesta

Erfahrenes Mitglied
Es ist leider unheimlich schwierig bei dem Mangel an Informationen aus der Ferne zu debuggen. Aber ich versuche es mal.

Als erstes solltest du zwei Sachen überprüfen.
1. Ist die Datei vorhanden? Und damit meine ich im Working Directory des Programms. Um sicher zu gehen, kannst du es z.B. auch mit einem absoluten Pfad für das Bild probieren. Der sollte dann unabhängig klappen.
2. Wenn open fehlschlägt setzt es meines Wissens einen Status in errno, den könntest du abfragen.