WEB开发网
开发学院操作系统Linux/Unix Linux下读取位图的事项 阅读

Linux下读取位图的事项

 2012-11-30 16:35:13 来源:WEB开发网   
核心提示: Linux下读取位图遇到的问题,很好地体现了Linux与Windows操作系统的不同,Linux下读取位图的事项,按理说位图格式与操作系统无关,读取也应该无关,其具体定义为:typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; DWORD

 Linux下读取位图遇到的问题,很好地体现了Linux与Windows操作系统的不同。按理说位图格式与操作系统无关,读取也应该无关,实际上在位图读到内存中时已经不同。下面主要介绍自己在Linux下操作位图遇到的问题。

(一)、位图结构

位图一开始是两个结构体,包括位图的详细信息,是读取后面数据的关键。所以读取位图首先要正确读取这两个结构体:BITMAPFILEHEADER和BITMAPINFOHEADER。其具体定义为:

typedef struct tagBITMAPFILEHEADER
{ // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}__attribute__ ((packed))BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{ // bmih
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}__attribute__ ((packed))BITMAPINFOHEADER;

上面两个结构是Windows下可以正常使用的。但是Linux下没有WORD、DWORD之类的变量类型,所以我们需要将这些变量映射到Linux下的常用变量类型:
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef int LONG;//use int not long here!!!
typedef unsigned char BYTE;

上述映射要特别注意每个类型的字节数。

Tags:Linux 读取 位图

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接