gpt4 book ai didi

C++ 使用 3D 动态数组和 vector

转载 作者:行者123 更新时间:2023-11-30 04:37:19 25 4
gpt4 key购买 nike

我是 C++ 的新手,对它感到有点沮丧。下面,在 pixelsVector 中,我将每个像素 RGB 浮点值存储在 Pixel 中并想要转储使用 pixelsArray 将所有值都保存到字节数组中,这样我就可以输出到图像文件中。 HEIGHT 和 WIDTH 是指图像尺寸。下面的代码工作正常,但我需要指定pixelsArray 在运行时的大小,因为它可能并不总是 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 vector 似乎确实有效,但 fwrite 不会将 vector 作为其第一个参数。我尝试使用三指针数组但是它似乎根本不起作用——也许我用错了。这里它使用 3D vector 作为 pixelsArray:

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);

建议?

最佳答案

您可以使用 Boost.MultiArray 代替 vector 的 vector ,这使您可以使用 .data() 方法访问底层内存。

看起来您正在尝试操作图像,因此您可能需要考虑使用 Boost.Gil .

关于C++ 使用 3D 动态数组和 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com