加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC++显示图像的几种方法及获取DC的方法

(2013-03-23 11:54:36)
标签:

vs2008

分类: vs2008


一、获取DC方法

为了进行绘图 ,必须获得一个设备描述表DC。有多种方式获得DC:

1、利用windows SDK全局函数获得

HDC hdc;

Hdc=::GetDC(m_hWnd);

::ReleaseDC(m_hWnd,hdc);

2、利用MFC的CDC封装类实现

CDC *pDC=GetDC();

ReleaseDC(pDC);

3、利用MFC的CClientDC类实现,此类派生于CDC类,并在构造函数中调用GetDC,在析构函数中调用ReleaseDC。

CClientDC dc(this);

This指针代表CClientDC对象所属的类对象,如视图类CXXView

二、有多种方法实现在窗口中显示位图:

1、BitBlt函数和StretchBlt函数(属于CDC类)

1)创建位图

CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP); //加载应用程序中的资源位图

2)创建兼容DC

CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC);

3)将位图选入兼容DC中

dcCompatible.SelectObject(&bitmap);

4)将兼容DC中的位图贴到当前DC中

pDC->BitBlt(rect.left,rect.top,rect.width,rect.height,&dcCompatible,0,0,SRCCOPY);

 

BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC *pSrcDC,int xSrc,int ySrc,DWORD dwRop);

x和y指定目标矩形左上角的坐标。

nWidth,nHeight指定目标矩形区域宽度和高度。

xSrc和ySrc指定源矩形区域左上角的x和y坐标。

得到rect GetClientRect(&rect);

 

BOOL StretchBlt(int x,int y,int nWidth,int nHeight,CDC *pSrcDC,int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,DWORD dwRop);

StretchBlt函数比BitBlt函数多了两个参数nSrcWidth和nSrcHeight,表示原矩形的宽度和高度。要得到选入位图的宽度和高度,可以调用CBitmap类的GetBitmap函数得到。

Int GetBitmap(BITMAP *pBitMap);

示例:BITBMP bmp;

      Bitbmp.GetBitmap(&bmp);

      pDC->StretchBlt(---bmp.bmWidth,bmp.bmHeight---);

 

2、StretchDIBits()(全局API函数)

BOOL StretchDIBits(HDC hdc,int x,int y,int nWidth,int nHeight,int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,CONST VOID *lpvBits,CONST BITMAPINFO *lpbmi,UINT fuColorUse,DWORD dwrop);

Hdc:设备上下文句柄

LpvBits:指向DIB数据图像的指针

Lpbmi:指向BITMAPINFOR结构的指针

示例:

::StretchDIBits(pDC->GetSafeHdc(),0,0,width,height,0,0,bitmapWidth,bitmapHeight,pBitmapData,pBitmapInfo,DIB_RGB_COLORS,SRCCOPY);


StretchDIBit函数的具体解释:

 

int StretchDIBits(

  HDC hdc,                      // 指向目标设备环境的句柄。

  int XDest,                    // 指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。

  int YDest,                    // 指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标

  int nDestWidth,               // 指定目标矩形的宽度

  int nDestHeight,              // 指定目标矩形的高度

  int XSrc,                     // 指定DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示

  int YSrc,                     // 指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示

  int nSrcWidth,                // 按像素点指定DIB中源矩形的宽度

  int nSrcHeight,               // 按像素点指定DIB中源矩形的高度

  CONST VOID *lpBits,           // 指向DIB位的指针,这些位的值按字节类型数组存储

  CONST BITMAPINFO *lpBitsInfo, // 指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息

  UINT iUsage,                  // 表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的RGB值或索引

  DWORD dwRop                   // 指定源像素点、目标设备环境的当前刷子和目标像素点是如何组合形成新的图像

);


 参数iUsage必须取下列值,这些值的含义如下:

  DIB_PAL_COLOR:表示该数组包含对源设备环境的逻辑调色板进行索引的16位索引值。

  DIB_RGB_COLORS:表示该颜色表包含原义的KGB值,若想了解更多的信息,请参考下面备注一节。


返回值:如果函数执行成功,那么返回值是拷贝的扫描线数目,如果函数执行失败,那么返回值是GDI_CRROR。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有