在 c++ 中生成 .pfm 图像

Generating .pfm image in c++

本文关键字:pfm 图像 c++      更新时间:2023-10-16

我有一个输出 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[] 这里是unsigned charVec3[](

现在我生成图像。

char sizes[256];
f = fopen("outputimage.pfm", "wb");
double scale = -1.0;
fprintf(f, "PFn%d %dn%lfn", 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,它工作正常。

我想问题出在缩放上,但我不确定应该如何正确完成。

结束问题。

我只需要将所有值从[0-255]范围转换为[0.0-1.0].因此,我将每个 rgb 值除以 255。