MFC 获得Btimap的高度 GetBitmap() 输出bitmap

来源:互联网 发布:linux拷贝文件夹 编辑:程序博客网 时间:2024/06/07 06:15

首先加载一张位图:可以使用2中方法,一种是利用CBitmap的LoadBitmap.还有一种是使用LoadImage.

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);//也可以从硬盘上加载,从硬盘加载的时候,LoadImage(“F:\\123.bmp”)就可以了。

BITMAP tempBmp;         //这里要定义一个位图结构体,和刚才加载的位图关联起来,就能得到位图的高度,宽度等信息

bitmap.GetBitmap(&tempBmp);

int width = tempBmp.bmWidth;       //高度

int height = tempBmp.bmHeight;    //宽度

//使用完后,要删除位图对象:

bitmap.DeleteObject();

 

输出一个位图:

比如在OnDraw中:

OnDraw()

{

    CDC *pDC = GetDC();

    CDC dcBack;

    dcBack.CreateCompatibleDC(NULL);   //创建背景DC

    CBitmap bitmap,*pOldBitmap;

    BTIMAP tempBmp;

    bitmap.LoadBitmap(IDC_BITMAP1);

    bitmap.GetBitmap(&tempBmp);    //获得bitmap的位图结构

    pOldBitmap = (CBtimap*)dcBack.SelectObject(&bitmap);  //将位图选入背景DC,作为后续输出

    pDC->BitBlt(0,0,tempBmp.bmWidth,tempBmp.bmHeight,&dcBack,0,0,SRCCOPY);        //BitBlt是原始输出,不会放大位图

//  pDC->StretchBlt(0,0,tempBmp.bmWidth*2,tempBmp.bmHeight * 2,&dcBack,0,0,tempBmp.bmWidth,tempBmp.bmHeight,SRCCOPY); // 将位图放大1倍输出

    //删除使用对象

   // dcBack.SelectObject(pOldBitmap);      这一句,我发现加上选择为空以后,程序就会报错,不知道什么原因,注释掉后,就没有问题了。

    dcBack.DeleteDC();

    bitmap.DeleteObject();

}

 

 

函数原型:int GetBitmap( BITMAP*pBitMap );

 

BITMAP数据结构:

 

typedef struct tagBITMAP {  /* bm */    LONG     bmType;    LONG     bmWidth;    LONG     bmHeight;    LONG     bmWidthBytes;    WORD    bmPlanes;    WORD    bmBitsPixel;    LPVOID  bmBits;} BITMAP;
bmType; //位图类型,必须为0
bmWidth; //位图宽度
bmHeight; //位图高度
bmWidthBytes; //每一行像素所在的byte数
bmPlanes; //颜色平面数
bmBitsPixel; //像素的位数
bmBits; //位图内存指针

位图的加载可以2种方式:使用CBitmap的成员函数LoadBitmap。或者使用API函数LoadImage,LoadImage返回的是句柄,需要自己转换为HBITMAP.