用OpenGL截取客户区图像,并保存为bmp图片,为灰色,求解决
经验证,图片保存部分代码没有问题,问题好像处在了读取数据的部分,但是始终看不出错误在哪?请大家多多指教!
部分代码如下:
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);
部分代码如下:
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);
...全文
相关推荐
opengl保存bmp图片函数
实现OpenGL保存窗口到bmp图片。将头文件"bitmap.h"复制到项目根目录下,在你的代码中#include "bitmap.h"。当用到保存bmp功能时,直接调用screenshot函数。内附使用说明。
OpenGL保存BMP图片源码
这是一个把OpenGL生成的图像保存成bmp图片的源代码
OpenGL读取、显示bmp图片
测试环境:xcode13.3 MacPro13-inch2020 M1 OpenGL版本:OpenGL 4.5 语言:c++17 测试图片格式:bmp 建议: 1.先完成xcode配置OpenGL工程环境,网上有教程。 2.本程序支持读取任意分辨率的bmp图片,并显示。
C语言读取、存储、显示BMP图像
在C语言下,可读取、存储、显示BMP图像,对BMP图像格式进行了详细剖析。
opengl读取并在屏幕上显示24位bmp图像.doc
opengl读取并在屏幕上显示24位bmp图像.doc


图形处理/算法
