Я пытаюсь разобрать файл ppm.
Значение c таково: http://netpbm.sourceforge.net/doc/ppm.html
Пример:
P3
# feep.ppm
4 4
15
0 0 0 0 0 0 0 0 0 15 0 15
0 0 0 0 15 7 0 0 0 0 0 0
0 0 0 0 0 0 0 15 7 0 0 0
15 0 15 0 0 0 0 0 0 0 0 0
Вещество после «15» - это rgb значения всех пикселей в данном изображении.
Я пробовал это до сих пор:
void read_and_draw_ppm_file() {
ifstream infile;
infile.open(TEXTURE_FILE.c_str());
string line;
int count = 0;
while (getline(infile, line) && count < 4) {
count++;
}
char c;
int red = -1, green = -1, blue = -1;
int rgb_count = 0;
for (int i = 0; i < TEXTURE_WIDTH; i++) {
for (int j = 0; j < TEXTURE_HEIGHT; j++) {
infile >> c;
if (rgb_count == 0) {
if (red != -1 && blue != -1 && green != -1) {
cout << red<<endl;
cout << green<<endl;
cout << blue<<endl;
uint32_t colour = (255 << 24) + (int(red) << 16) + (int(green) << 8) + int(blue);
window.setPixelColour(i, j, colour);
red = -1;
blue = -1;
green = -1;
}
red = (int) (unsigned char) c;
rgb_count++;
} else if (rgb_count == 1) {
green = (int) (unsigned char) c;
rgb_count++;
} else if (rgb_count == 2) {
blue = (int) (unsigned char) c;
rgb_count = 0;
}
}
}
infile.close();
}
Идея состоит в том, чтобы в основном извлечь триплеты по 3 байта, а затем преобразовать каждый в rgb соответственно.
Проблема в том, что когда я отображаю изображение на экране, оно не совсем такое, каким оно должно быть.
Где я ошибаюсь?
Исходное изображение:
Рендеринг изображения изображение: