Создание изображения .pfm в переполнении стека

У меня есть небольшая программа, которая выводит изображение RGB. И мне нужно, чтобы он был в формате .pfm.

Итак, у меня есть некоторые данные в диапазоне [0, 255],

float * data;
data = new float[PixelWidth * PixelHeight * 3];
for (int i = 0; i < PixelWidth * PixelHeight * 3; i += 3) {
int idx = i / 3;
data[i] = img[idx].x;
data[i + 1] = img[idx].y;
data[i + 2] = img[idx].z;
}

(img[] здесь Vec3[] из unsigned char)

Теперь я генерирую изображение.

char sizes[256];
f = fopen("outputimage.pfm", "wb");
double scale = -1.0;
fprintf(f, "PF\n%d %d\n%lf\n", PixelWidth, PixelHeight, scale);
for (int i = 0; i < PixelWidth*PixelHeight*3; i++) {
float d = data[i];
fwrite((void *)&d, 1, 4, f);
}
fclose(f);

Но почему-то я получаю изображение в градациях серого вместо RGB.

Данные в порядке. Я попытался вывести его как .ppm, и он работает нормально.

Думаю, проблема в масштабировании, но я не совсем уверен, как это сделать правильно.

1

Решение

Чтобы закрыть вопрос.

Я просто должен был преобразовать все значения из [0-255] диапазон до [0.0-1.0], Итак, я разделил каждое значение RGB на 255.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]