Я новичок в C ++ и немного разочарован этим. Ниже, в pixelVector, я сохраняю плавающее значение RGB для каждого пикселя в Pixel и хочу сбросить все значения в массив байтов с помощью pixelArray, чтобы я мог выводить в файл изображения. ВЫСОТА и ШИРИНА относятся к размерам изображения. Код ниже работает нормально, но мне нужно указать размеры 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);
Если я поставлю HEIGHT и WIDTH вместо 500 и 500 выше, я получаю сообщение об ошибке, поскольку они не являются постоянными значениями. Теперь использование трехмерного вектора, похоже, работает, но fwrite не принимает вектор в качестве первого аргумента. Я пробовал использовать массив с тройным указателем, но похоже, что это вообще не работает - может, я неправильно его использовал. Здесь используется трехмерный вектор для pixelArray:
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);
Предложения?