我需要在每次调用时追加RGB帧到文件。写入映像文件时发生C++ fwrite访问冲突
这里是我做的:
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得到called.Probably我误解了如何使用它。
w和h被初始化为图像的宽度和高度。但是现在我认为我通过的fwrite参数是错误的。为什么只传递“h”作为第三个参数? – 2013-03-17 15:19:29
@MichaelIV:fwrite是C标准库IO的一部分,通常是缓冲的。 fwrite的第一个参数是指向缓冲区的指针。第二个参数是缓冲区中单个元素的大小(在我们的例子中是单行像素)。第三个参数是缓冲区中之前指定的大小元素的数量。第四个参数是指向stdio文件对象的指针。以元素大小传递一行的长度给了stdio一个提示,一个好的缓冲大小是多少。 – datenwolf 2013-03-17 16:09:22
好的,现在我明白你的意思了 – 2013-03-17 19:22:28