用OpenGL截取客户区图像,并保存为bmp图片,为灰色,求解决

jingzhangchn jingzhangchn 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
经验证,图片保存部分代码没有问题,问题好像处在了读取数据的部分,但是始终看不出错误在哪?请大家多多指教!

部分代码如下:


g_width=r-l;
g_height=t-b;

FILE* pDummyFile;
FILE* pWritingFile;
GLubyte* pPixelData;
GLubyte BMP_Header[54];
GLint i, j;
GLint PixelDataLength;
// 计算像素数据的实际长度
i = g_width * 3; // 得到每一行的像素数据长度
while( i%4 != 0 )
++i;
PixelDataLength = i * g_height;
// 分配内存和打开文件
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, g_width, g_height, 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 = g_width;
j = g_height;
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);
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
jingzhangchn
图形处理/算法 19,463 成员 50,678 内容