C中显示*.bmp文件实例
来源:优易学  2010-1-18 17:09:10   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  void Set_BMP_Palette_Register(int index,RGB_BMP_ptr color)

  {

  outp(PALETTE_MASK,0XFF);

  outp(PALETTE_REGISTER_WR,index); /*确定调色板序号*/

  outp(PALETTE_DATA,color->red); /*设置该序号为红色*/

  outp(PALETTE_DATA,color->green); /*设置该序号为绿色*/

  outp(PALETTE_DATA,color->blue); /*设置该序号为兰色*/

  }

  调用调色板的代码:

  for(i=0;i<256,i++)

  Set_BMP_Palette_Register(i,(RGB_BMP_ptr) &bmp256->palette);

  现在我们开始进行完整的读取

  (1)申请内存空间

  (2)检查头文件信息区

  (3)读取调色板数据

  (4)读取位图到内存

  (5)显示图象

  (6)内存释放

  (1)申请内存:

  由于320*200是64K,而C程序允许用户申请的内存空间也只有64K,为了防止一次申请不到,我们可以分几次申请。使用malloc()函数就可以。

  (2)检查头文件信息区:

  A:判断是不是bmp文件(若不是,则无法显示)

  B:文件是否为压缩格式(若是,则无法处理)

  C:文件是否为256色

  以下给出读取头文件信息到内存的代码:

  read(fp,&bmp256->file,sizeof(bitmapfile));

  read(fp,&bmp256->info,sizeof(bitmapinfo));

  以下是检测bmp文件格式的函数:

  void Check_Bmp(bmp_picture_ptr bmp_ptr)

  {

  if(bmp_ptr->file.bfType!=0x4d42) /*检测是不是bmp文件*/

  {

  printf("Not a BMP file! ");

  exit(1);

  }

  if(bmp_ptr->info.biCompression!=0) /*检测是不是压缩文件,1表示压缩,0表示没压缩*/

  {

  printf("Can not display a compressed bmp file! ");

  exit(1);

  }

  if(bmp_ptr->info.biBitCount!=8) /*检测是不是256色*/

  {

  printf("Not a index 256color bmp file! ");

  exit(1);

  }

  }

  (3)和(4)前面有介绍,这儿省略。

  (5)显示图象

  假设bmp文件的调色板区已写入计算机调色板,bmp文件图象存储区也已写到内存,以下给出具体的显示到屏幕的函数

  void BMP_Show_Buffer2(bmp_picture_ptr image)

  {

  memcpy((char far *)video_buffer,(char far *)image->buffer,(unsigned int)info->biWidth*info->biHight/2)

  }

  (6)释放内存

  void BMP_Delete(bmp_picture_ptr image)

  {

  free(image->buffer);

  }

  好了,经过以上几步,基本上你的bmp文件就能在C中显示了。当然前提是你使用256色的图形驱动。也就是你的int gdrive=DETECT应该改为int gdrive=6;如果你仅仅显示16色的文件,就没有必要了。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训