zwl19920410 2013-12-19 08:38 采纳率: 0%
浏览 2241

openGL读取和写入,生成的图片是空的。

我从网上找的openGL教程
教到第十课关于读图片与写,可是不管用生成的图片是空的。

#define WindowWidth 400
#define WindowHeight 400
#include
#include
#include
#define BMP_HEADER_LENGtH 54

void grab(void)
{
FILE* pDummyFile;
FILE* pWritingFile;
GLubyte* pPixelData;
GLubyte* BMP_HEAD[BMP_HEADER_LENGtH];
GLint i,j;
GLint PixelDataLength;

i=WindowWidth*3;
while(i%4!=0)
    ++i;
PixelDataLength=i*WindowHeight;


pPixelData=(GLubyte*)malloc(PixelDataLength);
if(pPixelData=0)
    exit(0);

fopen_s(&pDummyFile,"dummy.bmp", "rb");
if(pDummyFile=0)
    exit(0);

fopen_s(&pWritingFile,"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);

fread(BMP_HEAD,sizeof(BMP_HEAD),1,pDummyFile);
fwrite(BMP_HEAD,sizeof(BMP_HEAD),1,pWritingFile);
fseek(pWritingFile,0x0012,SEEK_SET);
i=WindowWidth;
j=WindowHeight;
fwrite(&i,sizeof(i),1,pWritingFile);
//fseek(pWritingFile,0x0016,SEEK_SET);
fwrite(&j,sizeof(j),1,pWritingFile);

fseek(pWritingFile,0,SEEK_END);
fwrite(pPixelData,PixelDataLength,1,pWritingFile);

fclose(pDummyFile);
fclose(pWritingFile);
free(pPixelData);

}

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f,-0.5f,0.5f,0.5f);

glFlush();
grab();
}

int main(int argc, char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);

glutMainLoop();
return 0;
}

  • 写回答

2条回答 默认 最新

  • shiter 人工智能领域优质创作者 2015-01-19 03:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?