当然也可以使用另外的方式解决问题:新版本的OpenGL除了可以使用GL_RGB读取像素的红、绿、蓝数据外,也可以使用GL_BGR按照相反的顺序依次读取像素的蓝、绿、红数据,这样就与BMP文件格式相吻合了。即使你的gl/gl.h头文件中没有定义这个GL_BGR,也没有关系,可以尝试使用GL_BGR_EXT。虽然有的OpenGL实现(尤其是旧版本的...
像素在bmp图像中以BGR方式进行存储,GL_BGR_EXT方式进行纹理创建。 控制颜色格式的是glTexImage2D函数的format、internalformat参数。 解决方法 原来(一般教材的示例代码): glTexImage2D(GL_TEXTURE_2D,0, GL_RGB, width, height,0, GL_RGB, GL_UNSIGNED_BYTE, data); 改成: glTexImage2D(GL_TEXTURE_2D,0,...
glPixelStorei(GL_PACK_ROW_LENGTH,0); glPixelStorei(GL_PACK_SKIP_ROWS,0); glPixelStorei(GL_PACK_SKIP_PIXELS,0); // 保存当前的设置,后面再恢复它 glGetIntegerv(GL_READ_BUFFER, (GLint*)&lastBuffer); glReadBuffer(GL_FRONT); glReadPixels(0,0,iViewport[2],iViewport[3],GL_BGR_EXT,GL_UNSIGNED...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); 1. 注意,载入纹理的过程可能比较慢,原因是纹理数据通常比较大,例如一幅512*512的BGR格式的图象,大小为0.75M。把这些像素数据从主内存传送到专门的图形硬件,这个过程中还可能需要把程序中所指定的像素格...
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)...
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, BM.bmWidth, BM.bmHeight,GL_BGR_EXT, GL_UNSIGNED_BYTE,BM.bmBits); 方法二: 首先用OpenGL辅助库获得位图信息: AUX_RGBImageRec* TextureImage1; TextureImage0=auxDIBImageLoad("1.bmp"); 然后建立纹理
GL_BGR_EXT, // 数据格式 bmp使用 bgr GL_UNSIGNED_BYTE, // 组成图像的数据是无符号字节类型的 Bmp.ScanLineBmp.Height - 1 // DIB数据指针 ); // 下面两行是让opengl在放大原始的纹理大(GL_TEXTURE_MAG_FILTER)或缩小原始纹理(GL_TEXTURE_MIN_FILTER)时OpenGL采用的滤波方式。
void glDrawPixels ( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); 该函数的参数的含义如下所示: Width:像素数据的宽。 Height:像素数据的高。 Format:像素数据的格式,例如GL_RGB,GL_BGR,GL_BGRA等。 Type:像素数据在内存中的格式。
今天写二维纹理显示,主要是用CDIB::LoadBmp()读取一个bmp位图文件,然后生成二维纹理并显示出来,但我发现显示出来的纹理的颜色和原始图片的颜色不同,明明是张白底红条的图片,却渲染成了白底蓝条的,在网上搜了搜,发现因为BMP格式是按Blue,Green,Red顺序储存图像数据的,这与OpenGL中正好相反。GL_BGR_EXT就是完成两者...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); 注意,载入纹理的过程可能比较慢,原因是纹理数据通常比较大,例如一幅512*512的BGR格式的图象,大小为0.75M。把这些像素数据从主内存传送到专门的图形硬件,这个过程中还可能需要把程序中所指定的像素格式转...