Из последнего фрагмента кода:
vector<vector<Pixel>> pixelsVector (WIDTH, vector<Pixel> (HEIGHT));
Используя имена переменных в верхнем регистре, вы рискуете столкнуться с макросами. В C ++ все прописные имена условно зарезервированы для макросов.
...
vector< vector< vector<unsigned char> > > pixelsArray;
Предположительно, этот вектор такой же, как называется pixels
ниже?
Если это так, то стандартный совет заключается в том, что это помогает опубликовать реальный код.
В любом случае, чтобы вывести эти байты за одну эффективную операцию, необходимо, чтобы байты непрерывно сохранялись в памяти. Таким образом, вектор векторов векторов отсутствует. Используйте один вектор (C ++ гарантирует непрерывное хранение для буфера std::vector
).
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>());
На данный момент у вас есть внутренний вектор, но он пуст, размер 0.
vector<float> pixelColors;
pixelColors = pixelArray[i][j].getColor();
Предположительно pixelArray
это экземпляр класса, который вы определили?
for (int k = 0; k < 3; k++)
{
pixels[i][j][k] = pixelColors.at(k);
}
Здесь вы пытаетесь присвоить несуществующим элементам пустой внутренний вектор. Вы можете заранее определить его размер или использовать метод push_back
для каждого значения.
Кроме того, вы уверены, что значения float
являются целыми числами в диапазоне от 0 до 255 (или, в более общем случае, от 0 до UCHAR_MAX), а не, скажем, в диапазоне от 0 до 1?
Возможно, вам нужно масштабировать эти значения.
}
}
// Error
fwrite(pixelsArray, 1, 500*500*3, file);
Если pixelsArray
был (непустым) вектором байтов, то вы могли бы использовать &pixelsArray[0]
для получения указателя на первый байт.
Теперь, я знаю, вышеприведенное только рассекает часть того, что не так, и не говорит вам прямо, что правильно. : -)
Но для получения примера кода, необходимого для этого, потребуется некоторая дополнительная информация, например: (1) каковы ваши значения float
и (2) что вы хотите в своем файле?
В любом случае, надеюсь, это поможет,
- Альф