gpt4 book ai didi

c++ - 将部分屏幕保存到文件(SOIL 和 glReadPixels)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:05 27 4
gpt4 key购买 nike

我正在尝试保存大小为 5x5 像素的图像,使用 SOIL 使用 glReadPixels 将其读取到文件中。

我读取了像素:

int x = 400;
int y = 300;
std::vector< unsigned char* > rgbdata(4*5*5);
glReadPixels(x, y, 5, 5,GL_RGBA,GL_UNSIGNED_BYTE, &rgbdata[0]);

然后我尝试用SOIL的保存图像功能保存读取的数据

int save_result = SOIL_save_image
(
"image_patch.bmp",
SOIL_SAVE_TYPE_BMP,
5, 5, 4,
rgbdata[0]
);

但是在尝试保存图像时,出现未处理的异常。

解决方案(Christian Rau)

int x = 400;
int y = 300;
std::vector< unsigned char > rgbdata(4*5*5);
glReadPixels(x-(5/2), y-(5/2), 5, 5,GL_RGBA,GL_UNSIGNED_BYTE, &rgbdata[0]);

int save_result = SOIL_save_image
(
"image_patch.bmp",
SOIL_SAVE_TYPE_BMP,
5, 5, 4,
rgbdata.data()
);

最佳答案

您正在创建一个指向 unsigned char ( std::vector<unsigned char*>) 的指针 vector ,但您想要的只是一个指向 unsigned char (std::vector<unsigned char>) 的 vector 。

在调用 SOIL_save_image 时你不必给它rgbdata[0] ,这将是一个单一的 unsigned char (并且你的 vector 类型不正确是一个未初始化的指针,可能导致一些内存访问错误),但是指向完整数据的指针,因此是 rgbdata.data() (或者 &rgbdata[0] 如果你没有 C++11)。

关于c++ - 将部分屏幕保存到文件(SOIL 和 glReadPixels),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211676/

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