本文目录一览:
- 1、能否帮忙看一下,CDC类中的StretchBlt与BitBlt之间的区别,能否举例看看...
- 2、stretchblt为什么会造成图片失真
- 3、VC++中为什么BitBlt()函数画不出图来??刚学VC++,菜鸟中菜鸟,希望各位大...
能否帮忙看一下,CDC类中的StretchBlt与BitBlt之间的区别,能否举例看看...
1、在字节对齐矩形上的BitBlt操作比未经字节对齐的矩形上的BitBlt操作快许多。如果想对自己的设备上下文指定字节对齐类风格stretchblt,必须登记窗口类而不要依赖Microsoft基本类。可使用全局函数AfxRegisterWndClass。一旦使用目标设备上下文和使用源设备上下文,GDI变形nWidth和nHeight。
2、CDC包含m_hDC和m_hAttribDC两个设备上下文,它们在CDC对象创建时参考同一个设备。 CDC指导所有对m_hDC的输出GDI调用以及对m_hAttribDC的大部分属性GDI调用(GetTextColor是属性调用的例子,而SetTextColor是一个输出调用)。 例如框架使用这两个设备上下文实现CMetaFileDC对象,在从物理设备读取属性期间向元文件发送输出。
3、功能stretchblt:该函数的主要作用是设置设备上下文的版面布局,这对于处理不同方向的文字和图形布局非常重要。
4、尽量使用BitBlt,不要使用StretchBlt进行COPY。原因是stretchblt:1)StretchBlt进行拉伸需要使用算法,执行速度肯定没BitBlt快 2)StretchBlt的拉伸会使图形失真,仔细看下一幅800*600的图片,用StretchBlt拉伸至全屏后,和用Windows自带的图片查看器进行拉伸后比对,就会发现StretchBlt很傻的。
stretchblt为什么会造成图片失真
1、在VC环境下使用StretchBlt进行图像放大或缩小操作时,可能会遇到一些图像失真的问题。特别是在放大图像时,StretchBlt需要复制像素行或列。如果放大倍数不是原图的整数倍,那么此操作会导致图像有些失真。如果目标矩形比来源矩形小,那么在缩小图像时,StretchBlt必须将两行(或列)或多行的像素合并为一行(或列)。
2、对于点阵图来说,放大或缩小不可避免地会导致失真,这是基本原理。虽然完全不失真是不可能实现的,但可以通过使用适当的算法来尽可能减少失真。使用StretchBlt函数放大或缩小图片时,常常会遇到严重的失真问题。因此,为了改善这一状况,需要在调用StretchBlt之前使用SetStretchBltMode函数来设置伸缩模式。
3、StretchBlt进行拉伸需要使用算法,执行速度肯定没BitBlt快 2)StretchBlt的拉伸会使图形失真,仔细看下一幅800*600的图片,用StretchBlt拉伸至全屏后,和用Windows自带的图片查看器进行拉伸后比对,就会发现StretchBlt很傻的。
4、无损压缩,无损压缩是说图片大小和清晰度看上去和原图没有什么差别,但是确实size缩小了,这里缩小的原理是牺牲了分辨率等其他直观看不到的东西,看起来和原图一样,但是一放大就立马失真了,不会和原图一样放大很多才会逐渐变得不清晰。
5、使用StretchBlt会碰到一些与点阵图大小缩放相关的一些根本问题。在扩展一个点阵图时,StretchBlt必须复制图素行或列。如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有些失真。
VC++中为什么BitBlt()函数画不出图来??刚学VC++,菜鸟中菜鸟,希望各位大...
尽量使用BitBltstretchblt,不要使用StretchBlt进行COPY。原因是:1)StretchBlt进行拉伸需要使用算法stretchblt,执行速度肯定没BitBlt快 2)StretchBlt的拉伸会使图形失真,仔细看下一幅800*600的图片,用StretchBlt拉伸至全屏后,和用Windows自带的图片查看器进行拉伸后比对,就会发现StretchBlt很傻的。
标签: stretchblt

还木有评论哦,快来抢沙发吧~