C ++ с использованием трехмерных динамических массивов и векторов

Я новичок в 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);

Предложения?

1
задан Steve 10 October 2010 в 22:22
поделиться