1

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 として出力しようとしましたが、正常に動作します。

問題はスケーリングにあると思いますが、正しく行う方法がよくわかりません。

4

1 に答える 1