int main(){
std::fstream myfile; // file object is created
myfile.open ("green.ppm");
std::string line;
unsigned red,green,blue; //to output values on 0 -255 scale.
int width, height = 0;
if (myfile.is_open())
{
std::getline (myfile,line); //type of file, skip, it will always be for this code p6
std::getline (myfile,line); // width and height of the image
std::stringstream lineStream(line); //extract the width and height;
lineStream >> width;
lineStream >> height;
// std::cout<< width << " " << height <<" \n";
getline (myfile,line); //skip magic number
getline (myfile,line); // reach the matrix of numbers
for (int i = 0; i<(width*height*3) ; i= i+3){
char num = line[i]; uint8_t number = num; red = number;
num = line[i+1]; number = num; green = number;
num = line[i+2]; number = num; blue = number;
std::cout<<"pixel " << i/3 << " is " << red << " " << green << " " << blue << std::endl;
}
//char to uint_8t to unsigned is a basic an inefficient way I found that takes the pixel rgb values in my ppm file and allows me to interpret them from a range of 0-255
}
// cout<<counter<<endl;
myfile.close();
return 0;
}
Wenn ich diesen Code über verschiedene ppm-Bilder ausführen extrahiert es tatsächlich die RGB-Werte korrekt aber das Problem ist, dass es nicht vollständig tut. ein grundlegendes 800 x 800 Bild hat 640000 Pixel und dieser Code liest ungefähr 40800 und endet dann, als ob es dort nicht mehr gäbe.Probleme beim Lesen von ppm p6-Bild bis zum Abschluss. C++
Ich denke, das ergibt sich aus einem Missverständnis der ppm-Format selbst. Ich dachte, dass über das Header-Format hinaus, das die Datei mit dem Typ, der Breite und der Größe und der magischen Zahl ist, nur eine weitere Zeile und keine '\ n' Zeichen mehr vorhanden waren. Daher könnte die Matrix als ein zusammenhängendes Array von Zeichen gelesen werden.
Warum stoppt dieses Programm an solch einem seltsamen Ort?
Dank ich merke es jetzt. – DoingItForTheCorgi
Wie kommt es, dass das Drucken von Elementen im Array leere Bereiche ergibt? printf ("% d% c% c% c \ n", i/3, rot, grün, blau); funktioniert nicht. und keiner ist cout << "" rot << "" << grün << "" << blau; – DoingItForTheCorgi
@DoingItForTheCorgi versuchen mit 'cout << static_cast (pixelData [i])' –