在 C++ 中生成 .pfm 图像
Generating .pfm image in c++
我有一个输出 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 char
的 Vec3[]
)
现在我生成图像。
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 并且工作正常。
我想问题出在缩放方面,但我不太确定应该如何正确完成。
关闭问题。
我只需要将 [0-255]
范围内的所有值转换为 [0.0-1.0]
。所以,我将每个 rgb 值除以 255。
我有一个输出 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 char
的 Vec3[]
)
现在我生成图像。
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 并且工作正常。
我想问题出在缩放方面,但我不太确定应该如何正确完成。
关闭问题。
我只需要将 [0-255]
范围内的所有值转换为 [0.0-1.0]
。所以,我将每个 rgb 值除以 255。