Я новичок в C++ и немного расстроен. Ниже, в pixVector, я сохраняю значение пикселя RGB каждого пикселя в пикселе и хочу сбросить все значения в массив байтов с пикселемArray, чтобы я мог выводить в файл изображения. HEIGHT и WIDTH относятся к размерам изображения. Код ниже работает отлично, но мне нужно указать размеры пикселейArray во время выполнения, потому что это может быть не всегда изображение 500x500.C++ Использование трехмерных динамических массивов и векторов
// 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);
Предложения?
ли библиотека подталкивание встроенный в C++? – Steve
@John: Нет, но это примерно как кросс-платформа, которую может получить библиотека. –