用Opengl的接口glReadPixels去读取内存并保存为ppm格式时,会发现图片是倒置的,也就是需要一个逆置或者flip操作,
我使用glReadPixels的方式如下:
uint8_t* buf;
buf = (uint8_t*)malloc(sizeof(uint8_t)*SCR_WIDTH*SCR_HEIGHT*3);
glReadPixels(0,0,SCR_WIDTH,SCR_HEIGHT,GL_RGB,GL_UNSIGNED_BYTE,buf);
flip代码如下:
void flip(uint8_t** buf)
{
int totalLength = SCR_HEIGHT*SCR_WIDTH*3;
int oneLineLength = SCR_WIDTH*3;
uint8_t* tmp = (uint8_t*)malloc(SCR_HEIGHT*SCR_WIDTH*3);
memcpy(tmp,*buf,SCR_WIDTH*SCR_HEIGHT*3);
memset(*buf,0,sizeof(uint8_t)*SCR_HEIGHT*SCR_WIDTH*3);
for(int i = 0; i < SCR_HEIGHT;i++){
memcpy(*buf+oneLineLength*i,tmp+totalLength-oneLineLength*(i+1),oneLineLength);
}
}