我是 C++ 新手,对此感到有些沮丧。下面,在 pixelVector 中,我将每个像素 RGB 浮点值存储在 Pixel 中,并希望将所有值转储到带有 pixelArray 的字节数组中,以便可以输出到图像文件。HEIGHT 和 WIDTH 是指图像尺寸。下面的代码工作正常,但我需要在运行时指定像素数组的大小,因为它可能并不总是 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);
如果我把 HEIGHT 和 WIDTH 而不是 500 和 500 放在上面,我会得到一个错误,因为它们不是常量值。现在使用 3D 向量似乎确实有效,但 fwrite 不会将向量作为其第一个参数。我尝试使用三指针数组,但它似乎根本不起作用——也许我用错了。这里它使用了像素数组的 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);
建议?