#include #include#include#include#include#include#include#include#include#include#include#include
/*位图头文件数据结构*/typedefstructtagBITMAPFILEHEADER {
unsignedchar bfType[2]; //位图文件类型,必须为'B' 'M'
unsigned long bfSize; //位图文件大小(以字节为单位)
unsigned short bfReserved1; //位图文件保留字,必须为0
unsigned short bfReserved2; //位图文件保留字,必须为0
unsigned long bfOffBits; //位图数据的起始位置,以相对位图文件头的偏移量(单位字节)
}BITMAPFILEHEADER ; //共14Byte/*位图信息数据结构*/typedefstructtagBITMAPINFOHEADER{
unsignedlong biSize; //本结构所占用字节数
long biWidth; //位图宽度,以像素为单位
long biHeight; //位图高度,以像素为单位
unsigned short biPlanes; //目标设备级别,必须为1
unsigned short biBitCount; //每个像素所需的位数,1(双色),4(16色),8(256色),24(真彩色)
unsigned long biCompression; //位图的压缩类型,必须是0(示不压缩),1(BI_RLE8压缩类型),2(BI_RLE4压缩类型)之一
unsigned long biSizeImage; //位图大小以字节为单位
long biXPixPerMeter; //图像水平分辨率,每米像素数
long biYPixPerMeter; //图像垂直分辨率,每米像素数
unsigned long biClrUsed; //位图实际使用的颜色表中的颜色数
unsigned long biClrImporant; //位图显示过程中重要的颜色数
}BITMAPINFOHEADER; //共40Byte
structbuffer {void *start;
size_t length;
};#define CLEAR(x) memset(&(x), 0, sizeof(x))
static void xioctl(int fh, int request, void *arg)
{intr;do{
r=ioctl(fh, request, arg);
}while (r == -1 && ((errno == EINTR) || (errno ==EAGAIN)));if (r == -1) {
fprintf(stderr,"error %d, %s\n", errno, strerror(errno));
exit(EXIT_FAILURE);
}
}void saveImage(void *data,int imageWidth,intimageHeight)
{
BITMAPFILEHEADER*bitmapFileHeader;
BITMAPINFOHEADER*bitmapInfoHeader;
FILE*fp;if((fp=fopen("2345.bmp", "wb"))==NULL){
fprintf(stderr,"file cannot open\n");
exit(1);
}
bitmapFileHeader=(BITMAPFILEHEADER *)m