我需要在每次调用时将RGB帧附加到文件中。
以下是我的工作:
size_t lenght=_viewWidth * _viewHeight * 3;
BYTE *bytes=(BYTE*)malloc(lenght);
/////////////// read pixels from OpenGL tex /////////////////////
glBindTexture(GL_TEXTURE_2D,tex);
glGetTexImage(GL_TEXTURE_2D,0,GL_BGR,GL_UNSIGNED_BYTE,bytes);
glBindTexture(GL_TEXTURE_2D,0);
///write it to file :
hOutFile = fopen( outFileName.c_str(), cfg.appendMode ? "ab" : "wb" );
assert(hOutFile!=0);
fwrite(bytes, 1 ,w * h, hOutFile); // Write
fclose(hOutFile);
不知何故,当fwrite被调用时,我得到了访问冲突。可能我误解了如何使用它。
答案 0 :(得分:1)
如何确定_viewWidth
和_viewHeight
?回读纹理时,您应该使用glGetTexLevelparameteri检索它们,以从 GL_TEXTURE_2D 目标中检索 GL_TEXTURE_WIDTH 和 GL_TEXTURE_HEIGHT 参数。 / p>
也是行
fwrite(bytes, 1 ,w * h, hOutFile);
错了。什么是w
,什么是h
?它们永远不会在代码中初始化,也不会与其他分配相关联。此外,如果这些是图像的宽度和高度,它仍然缺少像素的元素数量。最有可能是3。
拥有像
这样的东西会更有意义int elements = ...; // probably 3
int w = ...;
int h = ...;
size_t bytes_length = w*elements * h;
bytes = malloc(bytes_length)
...
fwrite(bytes, w*elements, h, hOutFile);
答案 1 :(得分:0)
是由bytes
引起的吗?
也许w * h
不是你想象的那样。
答案 2 :(得分:0)
宽度是奇数还是不能被4整除?
默认情况下,OpenGL假定一行像素数据与四字节边界对齐。对于RGB / BGR,情况并非总是如此,如果是这样的话,你将会在malloc'ed块之外写一些东西。试试
glPixelStorei(GL_PACK_ALIGNMENT, 1)
在读取像素之前,看看问题是否消失。