opengl红宝书 第8章的代码中readImage()的简单解决方法(Intel 处理器上)
2007-10-31 17:14
330 查看
opengl红宝书 第8章的代码在Intel 处理器上, readImage()读取不正确.
原因如下 :字节交换(byte swapping):高位优先(big endians)和低位优先(little
endians)
高位优先和低位优先,指的是两种不同的方式,把整数储存在计算机中的的方式。因为整数是多于一个字节的,那么,问题在于:最重要的字节是否应该首先被读写。最不重要的字节是变化的最频繁的。这就是,如果你不断给一个整数加一,最不重要的字节要改变256次,次不重要的字节才只变化一次。
不同的处理器用不同的方式储存整数。Intel
处理器一般用低位优先方式来储存整数,换句话说,低位首先被读写。大多数其它处理器用高位优先方式来储存整数。因此,当二进制文件在不同平台上读写时,你就有可能不得不对字节重新排序以便得到正确的顺序。
在 UNIX 平台上,还有一种特殊的问题,因为UNIX可以在Sun
Sparc处理器、HP处理器、IBM Power PC、Inter的芯片等多种处理器上运行。当从一种处理器转移到另一种处理器上时,就意味着那些变量的字节排列顺序必须翻转,以便于它们能满足新处理器所要求的顺序。
最简单的修改方法:
GLubyte*
readImage( const char* filename, GLsizei* width, GLsizei *height )
...{
int n;
GLubyte* pixels;
FILE* infile = fopen( filename, "rb" );
if ( !infile ) ...{
fprintf( stderr, "Unable to open file '%s' ", filename );
return NULL;
}
/**//*fread( &byHeightLow, sizeof( BYTE ), 1, infile );
fread( &byHeightHi, sizeof( BYTE ), 1, infile );*/
*width = 599;
*height = 401;
n = 3 * (*width) * (*height);
pixels = (GLubyte *) malloc( n * sizeof( GLubyte ));
if ( !pixels ) ...{
fprintf( stderr, "Unable to malloc() bytes for pixels " );
return NULL;
}
fread( pixels, sizeof( GLubyte ), n, infile );
fclose( infile );
return pixels;
}
相关文章推荐
- opengl红宝书 第8章的代码中readImage()的简单解决方法(Intel 处理器上)
- ImageIO.read()方法读取,截取图片后重写,图片蒙上一层红色的解决 后感
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法
- ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(下)
- python3 request 爬虫 httplib.IncompleteRead() 问题的简单解决方法
- 《交互式计算机图形学 基於OpenGL着色器的自顶向下方法(第6版) 》代码运行问题及其解决
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。 2014-07-04 13:17 78人阅读 评论(0) 收藏
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。 .
- 最新恶意复制型病毒autorun.inf,stNP.VBS,NP.VBS代码简单解析和解决方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Unable to read the project file ... 简单解决方法
- 关于opengl中颜色表函数glcolortable出现异常的问题(opengl红宝书8-7程序)解决方法
- opengl红宝书第11章, gluTessCallback函数的例子在vs.net编译不过的解决方法
- 发送邮件常见出错代码及简单解决方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- 转载 :Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。