注:转载请注明出处。

函数原型

int StretchDIBits(HDC hdc,int XDest,int YDest,int nDestWidth,int nDestHeight,int XSrc,int Ysrc,int nSrcWidth,int nSrcHeight,CONST VOID * lpBits,CONST BITMAPINFO * lpBitsInfo,UINT iUsage,DWORD dwRop); HDC:指向设备的目标环境句柄。

该函数将DIB矩形中区域内像素使用的颜色数据拷贝到指定的目标矩形中。

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

YDest:指定目标矩形左上角的Ÿ轴坐标,按逻辑单位表示坐标。

nDestWidth:指定目标矩形的宽度本程序要显示的矩形宽:IMGWIDTH  

nDestHeight:指定目标矩形的高度本程序要显示的矩形高:IMGHEIGHT

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

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

nSrcWidth:按像素点指定DIB中源矩形的宽度。    

nSrcHeight:按像素点指定DIB中源矩形的高度。 

LP位元:指向DIB的位指针,位这些值的字节按类型数组存储,有关更多的信息。

lpBitsInfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。

iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的RGB。值或索引其他参数自己可以百度百科。

例子:

void CImgShow :: Draw(CDC * pDC)

{CRect dcrect;
    GetClientRect(&dcrect);
    CDC memDC; //兼容DC对象
    CBitmap Membitmap; //兼容位图对象

memDC.CreateCompatibleDC(PDC); //创建兼容DC    
    Membitmap.CreateCompatibleBitmap(pDC,dcrect.Width(),dcrect.Height()); //创建兼容位图
    memDC.SelectObject(&Membitmap); //将兼容位图选入兼容dc
    memDC.FillSolidRect(dcrect,RGB(255,255,255)); 
    memDC.SetStretchBltMode(COLORONCOLOR);

:: StretchDIBits(memDC.GetSafeHdc(),0,0,IMGWIDTH,IMGHEIGHT, 
        0,IMGHEIGHT,IMGWIDTH,-IMGHEIGHT,m_lpImage,m_lpImgInfo, 
        DIB_RGB_COLORS,SRCCOPY);

pDC-> BitBlt(0,0,dcrect.Width(),dcrect.Height(),&memDC,0,0,SRCCOPY);
    memDC.DeleteDC();
    Membitmap.DeleteObject();

}

这里只对的的StretchDIBits函数进行讲解。

:: StretchDIBits(memDC.GetSafeHdc(),0,0,IMGWIDTH,IMGHEIGHT,0,IMGHEIGHT,IMGWIDTH,-IMGHEIGHT,m_lpImage,m_lpImgInfo,DIB_RGB_COLORS,SRCCOPY);

图像原图如图1。

图1原图

1,:: StretchDIBits(memDC.GetSafeHdc(),0,0,dcrect.Width(),dcrect.Height(),0,0,m_nImgWidth,m_nImgHeight,m_lpImage,m_lpImgInfo,DIB_RGB_COLORS,SRCCOPY);

这时,图像是倒立的,因为是指定原图坐标原点是(0,0)中,Y轴向上为正。坐标轴如图1而原图的OpenCV中的图像数据是从下往上读取,所以,图像的最底部数据是(X,Y)是依次增大,被最后读取。对应到DIB上,图像就倒立了。显示结果如图2

图2显示结果

2.为了解决上述问题,将图像的坐标原点放在(0,srcHeight)中,Y轴翻转,则图像的高度变为负数,坐标轴如图3所示。这时,自顶向下DIB的起始点为左上角。与原图的扫描方式一样,图像正常显示,结果如图4所示

:: StretchDIBits(memDC.GetSafeHdc(),0,0,dcrect.Width(),dcrect.Height(),0,m_nImgHeight,m_nImgWidth,-m_nImgHeight,m_lpImage,m_lpImgInfo,DIB_RGB_COLORS,SRCCOPY);

图3坐标轴

图4结果显示。

最后利用的BitBlt的的函数,将DIB矩形内的图像贴到当前DC中。设备空间和物理设备空间中(0,0)是客户区的左上角,即从上往下。

StretchDIBits函数显示图片相关推荐

  1. StretchBlt, StretchDIBits函数显示失真问题

    StretchBlt, StretchDIBits可以对图像数据进行拉伸, 压缩显示, 但会失真, 解决方法 调用StretchBlt/StretchDIBits之前调用下面那一句 SetStretc ...

  2. opencv 使用命令行参数法显示图片

    imread()函数 返回值,Mat 类型, 即返回读取的图像,读取图像失败时返回一个空的矩阵对象(Mat::data == NULL) 参数1 filename, 读取的图片文件名,可以使用相对路径 ...

  3. STemWin显示图片

    目录 一  通过BmpCvtST.exe软件将图片转换为C数组,然后通过GUI_DrawBitmapEx函数显示 二  STemWin中bmp,jpg,gif,png格式图片的相关接口函数 三  读取 ...

  4. qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...

    前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...

  5. imread函数 matlab_【MATLAB图像处理学习】1.读取和显示图片

    CHAPTER2 图像处理的基础函数 [使用的教材:冈萨雷斯 数字图像处理MATLAB(Digital image processing with Matlab] [原书图片下载地址:点这里] 先介绍 ...

  6. php如何随机显示图片,php中随机显示图片的函数代码_php

    /********************************************** * Filename : img.php * Author : freemouse http://www ...

  7. php header jpg,php header函数输入图片IE不显示问题

    在php中利用header直接动态显示图片时发现显示图片为一个X了,这个问题在其它浏览器没有问题,只在ie浏览器中出问题了, 那么此问题如何解决? 刚开始img.php文件跳转到文件是这样写的 hea ...

  8. C/C++里面使用loadimage导入图片和使用miSendString播放音乐函数运行不显示图片不播放音乐的解决问题

    1.查看图片格式是否与代码里面的一样是否已.jpe. jpeg.png等图片后缀名,可以选种图片右键属性查看.(https://img-blog.csdnimg.cn/3bbe80f956324a9e ...

  9. 在MFC对话框中显示图片的三种方法(有两种使用OpenCv)

    最近写了一个用对话框显示图片的程序,这里将学习到的东西整理一下: 编程环境:VC6.0+OpenCv1.0 准备工作:用VC6.0生成一个对话框外壳(全被采用默认设置),然后在对话框中添加一个静态控件 ...

  10. 调用opencv3.x 库,在MFC中显示图片

    调用opencv3.x 库,在MFC中显示图片 使用opencv和MFC显示图片的方法大致分为以下几种: 1:将opencv的显示对话框嵌入到MFC窗口. 2:使用CvvImage类显示图片. 3:将 ...

最新文章

  1. [hive] hive 内部表和外部表
  2. sqlalchemy Specified key was too long; max key length is 767 bytes的解决办法
  3. linux如何自动清buff,centos7
  4. Android Scroll分析
  5. Js Array数组ES5/ES6常用方法
  6. 笔记-项目整体管理-变更管理-变更管理的原则
  7. vue中 使用md5加密
  8. vscode中控制台不能输入_vscode调试时如何在控制台输入
  9. 解决在工具栏Chrome图标上点击右键会显示“常去网站”和“最后关闭网站”的问题
  10. unity中遍历Transform的子物体
  11. 计算机基础知识试题分值,计算机考试题分值分布.doc
  12. 开源可视化网页抓取工具Portia 爬虫
  13. python集合的并交差操作
  14. 两台计算机如何传输数据,详解两台电脑直连传输数据方法
  15. Python3-正则表达式~爬取猫眼电影应用
  16. 微信小程序入门:和风天气小程序
  17. 给IDEA换个酷炫的主题,有点好看!
  18. ZBrush笔刷属性栏简介
  19. JMeter 调试取样器(Debug Sampler)简介
  20. JZOJ 1307 Jail

热门文章

  1. 关闭eslink:报错:Unexpected tab character no-tabs
  2. Express框架学习笔记-静态资源的处理
  3. python成员变量_Python——成员变量
  4. java抓取网页数据_Python抓取网页数据的终极办法 !
  5. vue的下拉框如何回显_JAVA学习笔记系列:菜鸟Vue学习笔记(三)
  6. 英文c语言试题,C语言今日练习试题(主要练习英文阅读能力)
  7. idea用svn怎么检出项目_IDEA 从SVN检出项目相关配置
  8. CMU 15-213 Introduction to Computer Systems学习笔记(22) Synchronization: Advanced
  9. java jax ws_Java 7是否包含JAX-WS实现或API?
  10. ollvm源码分析之虚假控制流(2)