mfc中StretchBlt缩放图像失真问题【zozo】

转自http://blog.163.com/zozowit@126/blog/static/40705087200881213834300/

 

用StretchBlt,图像缩放是,失真很严重

有人说用pScreenDC->SetStretchBltMode(COLORONCOLOR),结果失真更严重了

发现pDC->SetStretchBltMode(HALFTONE);效果最佳

深层了解:

 函数原型:int SetSTretchBltMode(HDC hdc, int iStretchMode)

 

  参数

    hdc:设备环境句柄。

    LStretchMode:指定拉伸模式。它可以取下列值,这些值的含义如下:

    BLACKONWHITE:使用消除和现在的像素颜色值进行逻辑AND(与)操作运算。如果该位图是单色位图,那么该模式以牺牲白色像素为代价,保留黑色像素点。

    COLORONCOLOR:删除像素。该模式删除所有消除的像素行,不保留其信息。

    HALFTONE:将源矩形区中的像素映射到目标矩形区的像素块中,覆盖目标像素块的一般颜色与源像素的颜色接近。在设置完HALFTONE拉伸模之后,应用程序必须调用SetBrushOrgEx函数来设置刷子的起始点。如果没有成功,那么会出现刷子没对准的情况。

    STRETCH_ANDSCANS:与BLACKONWHITE一样。

    STRETCH_DELETESCANS:与COLORONCOLOR一样。

    STRECH_HALFTONE:与HALFTONE相同。

    STRETCH_ORSCANS:与WHITEONBLACK相同。

    WHITEONBLACK:使用颜色值进行逻辑OR(或)操作,如果该位图为单色位图,那么该模式以牺牲黑色像素为代价,保留白色像素点。

    返回值:如果函数执行成功,那么返回值就是先前的拉伸模式,如果函数执行失败,那么返回值为0。

    Windows NT:若想获得更多错误信息,请调用GetLastError函数。

    备注:拉伸模式在应用程序调用StretchBit函数时定义系统如何将位图的行或列与显示设备上的现有像素点进行组合。

    BLACKONWHITE(STRETCH_ANDSCANS)和WHITEONBLACK(STRETCH_ORSCANS)模式典型地用来保留单色位图中的前景像素。COLORONCOLOR(STRETCH_DELETESCANS)模式则典型地用于保留彩色位图中的颜色。

    HALFTONE模式比其他三种模式需要对源图像进行更多的处理,也比其他模式慢,但它能产生高质量图像,也应注意在设置HALFTONE模式之后,应调用SetBrushOrgEx函数以避免出现刷子没对准现象。

    根据设备驱动程序的功能不同,其他一些拉伸模式也可能有效。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC和Halcon都是常用于图像处理和图像显示的工具,可以用于展示和处理连续动态图像。动态图像显示是指在连续动态图像显示过程,可以实现对图像进行操作。 首先,对于MFC来说,可以使用CImage类来加载和显示图像。通过调用CImage类的Scale方法,可以实现对图像。Scale方法可以接受一个比例参数,通过调整该参数的值可以实现不同程度的效果。具体步骤如下: 1. 使用CImage类加载图像文件,获取图像的宽度和高度信息。 2. 创建一个新的CImage对象,作为后的图像对象。 3. 调用Scale方法,传入比例参数,实现图像。 4. 使用MFC提供的绘图函数(如CDC::StretchBlt)将后的图像显示在窗口上。 而对于Halcon来说,可以使用其提供的显示操作符和图像操作函数来实现图像的连续动态显示和。具体步骤如下: 1. 使用Halcon的图像读取函数(如read_image)加载图像文件,获取图像的宽度和高度信息。 2. 使用Halcon的显示操作符(如disp_image)将图像显示在窗口上。 3. 利用Halcon的图像操作函数(如zoom_image)进行图像操作。zoom_image函数可以接受一个因子参数,通过调整该参数的值可以实现不同程度的图像。 4. 使用Halcon的刷新函数(如refresh_window)更新窗口显示。 总之,无论是使用MFC还是Halcon,都可以实现对连续动态图像的显示和操作,只需调用相应的函数和方法即可。具体选择使用哪种工具,需要根据实际情况和需求来决定。 ### 回答2: 在MFC,可以使用CDC类的StretchBlt函数来实现连续动态图像的显示。首先,创建一个CDC对象,用来绘制图像。然后,使用StretchBlt函数将图像绘制在指定位置,并指定的尺寸。这样,就可以实现图像的连续动态。 在Halcon,可以使用zoom_image函数来实现连续动态图像的显示。首先,加载图像并创建一个窗口用于显示图像。然后,使用zoom_image函数将图像到指定的尺寸,并显示在窗口。通过不断改变的尺寸,就可以实现图像的连续动态。 总结而言,无论是在MFC还是在Halcon,都可以通过调用相应的函数来实现连续动态图像的显示。在MFC使用StretchBlt函数,在Halcon使用zoom_image函数。这些函数可以根据需要设定图像的位置和的尺寸,以实现不同的效果。 ### 回答3: MFC是微软基于Windows操作系统开发的一套应用程序框架,而Halcon是一款用于机器视觉和图像处理的软件库。MFC提供了一系列图形绘制和窗口管理的功能,可以用于实现图像显示的功能。而Halcon则提供了丰富的图像处理算法和功能,可以用于图像、旋转、滤波等操作。 如果要在MFC实现Halcon图像的连续动态显示和功能,可以按照以下步骤进行: 1. 在MFC应用程序添加Halcon库的引用和相关的头文件。 2. 创建一个MFC窗口,该窗口将用于显示Halcon图像。 3. 在窗口的OnPaint函数,通过Halcon提供的函数将图像绘制到窗口。可以使用halcon::disp_obj函数将图像显示在窗口。 4. 在窗口的OnSize函数,实现图像功能。可以通过halcon::zoom_image_size函数来调整图像的大小,并重新将图像绘制到窗口。 5. 在需要连续动态显示的场景,可以使用定时器或线程来定时更新图像。通过halcon::clear_window函数清空窗口内容,再通过halcon::disp_obj函数将更新后的图像显示在窗口。 通过以上步骤,就可以在MFC实现Halcon图像的连续动态显示和功能了。通过不断更新图像并调整图像大小,可以实现图像的实时显示和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值