以下是我学vc++看的几篇文章:不是本人所写:如果作者有需要的话:请联系我[63]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 ftbk 的 blog

    i=_lread(hfile,&filehead,sizeof(bitmapfileheader));

   if(i==hfile_error) falsereturn;//goto bmp_false_end;

// type=filehead.bftype;

 

   //读取信息头

i=sizeof(bitmapinfoheader)+sizeof(rgbquad)*256;

    _lread(hfile,lpinfohead,i);

 

//建立调色板

    if(!sty)createpal(lpinfo);

 

   ubytes=_llseek(hfile,0,2);

   if ((filehead.bfsize)>ubytes) falsereturn;//goto bmp_false_end;

 

                              

   if(hdata)globalfree(hdata);

   size=ubytes_filehead.bfoffbits;

   hdata=globalalloc(gmem_fixed,size);

   bmpdata * data=(bmpdata*)globallock(hdata);

 

   //读取数据

_llseek(hfile,filehead.bfoffbits,0);

 

    for(;_lread(hfile,data,rblock)==rblock;data+=rblock);

   globalunlock(hdata);

   _lclose(hfile);

   return true;

}

 

mybmp.h文件中为了构造bmp框架,我们定义了三个类:class palette

class dibpalette 、class mydib 。其中palette是基类。dibpalette继承了类palette,而类mydib又继承了类dibpalette。

  • class palette:

在此类中,我们定义了两个成员变量hpal和holdpal、七个成员函数。这七个成员函数功能如下:其中两个分别是构造函数和析构函数,两个函数createpal

(bitmapinfo*)、createpal(lplogpalette )根据指定参数完成构造调色板的作用,一个函数setpal(hdc)实现调色板,一个函数resetpal(hdc)恢复调色板,一个函数getpal()获得调色板。

  • class mydib:

在此类中,我们定义了两个核心成员变量p和hdata,其中p是一个自定义结构,它包含一个bmpinfo 头信息和一个调色板,hdata是指向内存中一块数据的句柄,另外两个参数lpinfo和lpinfohead实际上是指向结构p的指针。四个成员函数 show()的内核是api函数setdibitstodevice()。它们的功能是根据结构p和句柄hdata把图像显示到屏幕上。

  • class bmp:

在此类中,我们只定义了两个成员函数open,它们的功能是打开一个bmp文件,并将文件内容填入其基类的参数中。前面我们提到过在多媒体编程中需要用公共调色板,但有时也需要用私有调色板,因此在open函数中第二个参数指定了这个区别,若参数为0则构造自己的hpal,否则自己的hpal无效。  

   

实例分析

      

在这个实例中,我们将调入一个bmp文件,并把它显示到屏幕上,程序过程如下:

本文关键:以下是我学vc++看的几篇文章:不是本人所写:如果作者有需要的话:请联系我
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top