MFC_显示图片

来源:互联网 发布:r语言与数据挖掘 pdf 编辑:程序博客网 时间:2024/06/01 23:16

方法一

步骤

1、将想要加载的图片利用windows自带的绘图工具转换成bmp格式
2、在vs中添加这个bmp资源,获得这个资源的ID(假设为IDB_BITMAP1)
3、在ondraw函数中添加如下代码

    CBitmap bitmap;    bitmap.LoadBitmapA( IDB_BITMAP1 );    BITMAP bmp;            bitmap.GetBitmap( &bmp );   // 该结构体bmp储存了位图的有关信息    CDC dcCompatible;    dcCompatible.CreateCompatibleDC( pDC );  // 创建与当前DC(pDC)兼容的DC    dcCompatible.SelectObject( &bitmap );    CRect rect;    GetClientRect( &rect );//获取客户区域的矩形    /** 法一:将兼容DC中的位图复制到目的DC中,该函数是1:1复制的,不会伸缩和压缩位图;    pDC->BitBlt( 0, 0, rect.Width(), rect.Height(), &dcCompatible, 0, 0, SRCCOPY );    */    // 法二:可以按照指定大小实现位图的伸缩和拉伸    pDC->StretchBlt( 0, 0, rect.Width(), rect.Height(), &dcCompatible, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY );

BitBlt函数

函数原型:
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

参数:
int x:目标矩形左上角的逻辑x坐标
int y:目标矩形左上角的逻辑y坐标
int nWidth:指定目标矩形和源位图的宽度
int nHeight指定目标矩形和源位图的高度
CDC* pSrcDC:指向CDC对象的指针,标识待拷贝位图的设备上下文
int xSrc:指定源位图左上角的逻辑X坐标
int ySrc:指定源位图左上角的逻辑Y坐标
DWORD dwRop:指定要执行的光栅操作
其中dwrop的值可以是

  • BLACKNESS 所有输出变黑
  • DSTINVERT 反转目标位图
  • MERGECOPY 使用布尔AND操作符合并特征与源位图
  • MERGEPAINT 使用布尔OR操作符合并特征与源位图
  • NOTSRCCOPY 拷贝反转源位图到目标
  • NOTSRCERASE 反转使用布尔OR操作符合并源和目标位图的结果
  • PATCOPY 拷贝特征到目标位图
  • PATINVERT 使用布尔XOR操作符合并目标位图和特征
  • PATPAINT 使用布尔OR操作符合并反转源位图和特征。用布尔OR操作符合并这项操作结果与目标位图
  • SRCAND 使用布尔AND操作符合并目标像素和源位图
  • SRCCOPY 拷贝源位图到目标位图
  • SRCERASE 反转目标位图并用布尔AND操作符合并这个结果和源位图
  • SRCINVERT 使用布尔XOR操作符合并目标像素和源位图
  • SRCPAINT 使用布尔OR操作符合并目标像素和源位图
  • WHITENESS 所有输出变白

StretchBlt函数

函数原型

BOOL StretchBlt(     int x,//目标矩形左上角的X逻辑坐标     int y,//目标矩形左上角的Y逻辑坐标     int nWidth,//目标矩形的宽度     int nHeight,//目标矩形的高度     CDC* pSrcDC,//指定源设备上下文     intxSrc,//源矩形左上角的X逻辑坐标     int ySrc,//源矩形左上角的Y逻辑坐标     int nSrcWidth,//源矩形的宽度     int nSrcHeight,//源矩形的高度     DWORD dwRop//指定光栅操作(同Bitblt)     )

方法二

步骤

1、将图片(可以为非bmp图片)保存到res文件夹下
2、添加如下代码(onDraw)

CRect rect;GetClientRect( &rect );CImage image;image.Load(_T("res\*.jpg"));image.Draw(pDC,rect);/*CImage中也有Bitblt与StretchBlt函数,用法与CDC类的函数类似*/

Draw函数

函数原型

BOOL Draw( HDC hDestDC, const RECT& rectDest, const RECT& rectSrc );BOOL Draw( HDC hDestDC, int xDest, int yDest );BOOL Draw( HDC hDestDC, const POINT& pointDest );BOOL Draw( HDC hDestDC, int xDest, int yDest,int nDestWidth, int nDestHeight );BOOL Draw( HDC hDestDC, const RECT& rectDest );

hDestDC用来指定绘制的目标设备环境句柄,(xDest, yDest)和pointDest用来指定图像显示的位置,这个位置和源图像的左上角点相对应。
nDestWidth和nDestHeight分别指定图像要显示的高度和宽度,xSrc、ySrc、nSrcWidth和nSrcHeight用来指定要显示的源图像的某个部分所在的位置和大小。
rectDest和rectSrc分别用来指定目标设备环境上和源图像所要显示的某个部分的位置和大小。
需要说明的是,Draw方法综合了StretchBlt、TransparentBlt和AlphaBlend函数的功能。默认时,Draw的功能和 StretchBlt相同。但当图像含有透明色或Alpha通道时,它的功能又和TransparentBlt、AlphaBlend相同。因此,在一般情况下,我们都应该尽量调用CImage::Draw方法来绘制图像。

参考

1、http://www.cnblogs.com/dongsheng/p/3614210.html
2、http://blog.csdn.net/huamin1990/article/details/5349947

0 0
原创粉丝点击