私は C++ が初めてで、少しイライラしています。以下の pixelVector では、各ピクセルの RGB 浮動小数点値を Pixel に格納しています。すべての値を、pixelsArray を使用してバイト配列にダンプして、画像ファイルに出力できるようにします。HEIGHT と WIDTH は画像の寸法を表します。以下のコードは問題なく動作しますが、実行時に pixelArray のサイズを指定する必要があります。これは、常に 500x500 の画像であるとは限らないためです。
// WIDTH and HEIGHT specified at run-time
vector<vector<Pixel>> pixelsVector (WIDTH, vector<Pixel> (HEIGHT));
...
unsigned char pixelsArray[500][500][3];
for (int i = 0; i < 500; i++)
{
for (int j = 0; j < 500; j++)
{
// Returns RGB components
vector<float> pixelColors = pixelArray[i][j].getColor();
for (int k = 0; k < 3; k++)
{
pixels[i][j][k] = pixelColors.at(k);
}
}
}
// write to image file
fwrite(pixelsArray, 1, 500*500*3, file);
上記の 500 と 500 の代わりに HEIGHT と WIDTH を入力すると、定数値ではないためエラーが発生します。現在、3D ベクトルの使用は機能しているように見えますが、fwrite は最初の引数にベクトルを取りません。トリプルポインター配列を使用してみましたが、まったく機能していないようです - 間違った使い方をしていたのかもしれません。ここでは、pixelsArray に 3D ベクトルを使用しています。
vector<vector<Pixel>> pixelsVector (WIDTH, vector<Pixel> (HEIGHT));
...
vector< vector< vector<unsigned char> > > pixelsArray;
for (int i = 0; i < HEIGHT; i++)
{
pixels.push_back(vector< vector<unsigned char> >());
for (int j = 0; j < WIDTH; j++)
{
pixels[i].push_back(vector<unsigned char>());
vector<float> pixelColors;
pixelColors = pixelArray[i][j].getColor();
for (int k = 0; k < 3; k++)
{
pixels[i][j][k] = pixelColors.at(k);
}
}
}
// Error
fwrite(pixelsArray, 1, 500*500*3, file);
提案?