逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
在许多图像的数据存储中,都是按字节来存储的(也有按float型的,如PPM),因为颜色的值为0 ~ 255,即一个无符号整型的数据GLubyte。但在图像颜色数据之前,还包括图像的很多信息,如图像的类型,图像的每个像素信息是否含有alpha域,图像的宽,高得,就像MBP一样,前五十四个字节是图像的相关信息,从第五十四个字节后才是图像的颜色数据,TGA的前十二字节包含了是否压缩等,第十三个到第十八个字节是图像的宽,高,alpha信息。但现在有个问题,图像的宽高什么的数据在图像的二进制文件中都是按字节来存放的,但他们又是 int 型或者 short(TGA) 型的,一个字节的数据并表示不完一个图像的宽高等,而一般用二个或四个,那怎么从每次读入的单个字节的信息来组装成一个int 或者 short信息呢?
 
这就要先知道这些信息在文件中是怎么存储的,一般如TGA中,都是按从低位到高位进行存储,0x1234这是一个占有两个字节的数据,即shot型,在图像文件中的存储方式是 0x34, 0x12,当我们读出这两个字节后,如这两个字节在这里表示图像的宽,则转换成 short 为:int width = 0x12 * 16^2 + 0x34即 18 * 256 + 52,
这个可以来这么理解:
0x12345678 = 0x12000000 + 0x340000 + 0x5600 + 0x78
= 0x12 * 16^6 + 0x34 * 16^4 + 0x56 * 16^2 + 0x78
 
这也是内存为什么是按字节来读取,但最后又可以转换成各种类型的基础。
posted on 2010-12-17 17:28 逛奔的蜗牛 阅读(456) 评论(0)  编辑 收藏 引用 所属分类: OpenGL

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理