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;
}
Bu kodu farklı ppm görüntüleri üzerinde çalıştırdığımda, aslında rgb değerlerini doğru şekilde ayıklamakta, ancak sorun bunun tamamen yapılmamasıdır. Temel 800 x 800 görüntü 640000 piksele sahip ve bu kod yaklaşık 40800'ü okuyor ve artık yokmuş gibi bitiyor.ppm p6 görüntünün tamamlanması için okuma sorunları. C++
Bunun ppm formatının kendisinin yanlış anlaşılmasından kaynaklandığını düşünüyorum. Yazı tipi, genişlik ve boyut ve sihirli sayıya sahip olan başlık biçiminin ötesinde, yalnızca bir satır daha ve daha fazla '\ n' karakterin olmadığını düşündüm. Bu nedenle matris, bitişik bir karakter dizisi olarak okunabilir.
Peki bu program neden böyle garip bir yerde duruyor?
sayesinde şimdi bunun farkında. – DoingItForTheCorgi
Dizideki yazdırma elemanları boş alanlar mı veriyor? printf ("% d% c% c% c \ n", i/3, kırmızı, yeşil, mavi); çalışmıyor. ve hiçbiri cout << "" kırmızı << "" << yeşil << "" << mavi; – DoingItForTheCorgi
@DoingItForTheCorgi, "cout << static_cast (pixelData [i]) ile çalış" –