opengl中捕获bmp图像时如何设定保存图像的位置

我在网上找了一段捕获屏幕图像的代码(下面),插入到自己的程序中后,想通过键盘输入捕获图像。但是屏幕只是闪了一下,图像并没有生成,我想问一下,如何设置保存图像的位置?还有,... 我在网上找了一段捕获屏幕图像的代码(下面),插入到自己的程序中后,想通过键盘输入捕获图像。但是屏幕只是闪了一下,图像并没有生成,我想问一下,如何设置保存图像的位置?还有,在这段程序中,图像捕获后被存在了哪里呢?

void grab(void)
{
FILE* pDummyFile;
FILE* pWritingFile;
GLubyte* pPixelData;
GLubyte BMP_Header[BMP_Header_Length];
GLint i, j;
GLint PixelDataLength;
int WindowWidth = 640;
int WindowHeight = 480;
// 计算像素数据的实际长度
i = WindowWidth * 3; // 得到每一行的像素数据长度
while( i%4 != 0 ) // 补充数据,直到i是的倍数
++i; // 本来还有更快的算法,
// 但这里仅追求直观,对速度没有太高要求
PixelDataLength = i * WindowHeight;
// 分配内存和打开文件
pPixelData = (GLubyte*)malloc(PixelDataLength);
if( pPixelData == 0 )
exit(0);
pDummyFile = fopen("dummy.bmp", "rb");
if( pDummyFile == 0 )
exit(0);
pWritingFile = fopen("grab.bmp", "wb");
if( pWritingFile == 0 )
exit(0);
// 读取像素
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glReadPixels(0, 0, WindowWidth, WindowHeight,
GL_BGR_EXT, GL_UNSIGNED_BYTE, pPixelData);
// 把dummy.bmp的文件头复制为新文件的文件头
fread(BMP_Header, sizeof(BMP_Header), 1, pDummyFile);
fwrite(BMP_Header, sizeof(BMP_Header), 1, pWritingFile);
fseek(pWritingFile, 0x0012, SEEK_SET);
i = WindowWidth;
j = WindowHeight;
fwrite(&i, sizeof(i), 1, pWritingFile);
fwrite(&j, sizeof(j), 1, pWritingFile);
// 写入像素数据
fseek(pWritingFile, 0, SEEK_END);
fwrite(pPixelData, PixelDataLength, 1, pWritingFile);
// 释放内存和关闭文件
fclose(pDummyFile);
fclose(pWritingFile);
free(pPixelData);
}
展开
 我来答
okou0696
2012-11-28 · TA获得超过1485个赞
知道小有建树答主
回答量:1343
采纳率:0%
帮助的人:821万
展开全部
1,从你给的这段代码来看,它的意图是:dummy.bmp只是一个临时文件,用来拷贝文件头的。再把新得到的图象文件,写入,保存为grab.bmp。该文件在vc工程根目录下,和dsw文件同属一个目录。
2,dummy.bmp并不必要,也可以自行写入文件头。这里新建一个1像素的临时文件,只是为了方便得到文件头。好象是50多个字节,记不太清楚了。你可以自己查一查BMP文件头的大小。
3,640*480只是一个自定的宽高,可灵活处理。比如读取鼠标按下时的坐标,再读取鼠标弹起时的坐标,相减,得到区域大小。
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式