 |
你这个问题令我有点困惑。因为ImageBox就是使用StrechBlt实现的,应该说两个方法的效果是一样的。之所以会产生不同,我想可能有以下几个原因:
1、使用ImageBox时,你可以手工调整大小,直到满意为止,这样图像大小选择比较合适。而使用StrechBlt时,缩放比例不合适。
2、你观察存盘后的图像文件时,不是按照1比1的比例观察的。位图的一个缺点就是缩放后失真,如果你观察时不是采用1比1的比例,就等于两次缩放,两次失真,所以你感觉上图像质量不好,但实际上是一样的。要想提高缩放后的图像质量,最重要的是减少缩放次数。
在这里我介绍一种将缩放后的图像存盘的方法,这种方法同你的方法可能没有实质的不同,我只是想借助这个例子说明,只要你使用StrechBlt正确,是不会出现你说的情况的。
先准备一个ImageBox,调整尺寸,直到你满意。
再准备一个PictureBox。
然后加上一个按钮,输入以下代码。
Private Sub Command1_Click()
Picture1.AutoRedraw = True
Picture1.PaintPicture Image1.Picture, 0, 0, Image1.Width, Image1.Height
Picture1.Picture = Picture1.Image
Picture1.AutoRedraw = False
SavePicture Picture1.Picture, "c:\test.bmp"
End Sub
这个例子将Image1中的图像按照Image1的尺寸复制到Picture1中,然后再存盘。
abu的意见:
WINDOWS的色板是因显示颜色数不同而变化的,显示的图片其实存在于与设备有关的MemoryDC中,它与色板一一对应,所以保存ImageBox的图片时,如果系统显示颜色为8BIT那么所保存的图片就是一个256色的图片……。
还有,WINDOWS所提供的GUI图像处理函数没有“消锯齿”功能,图像缩放之后色差或反差较强的图像边缘有明显的锯齿。
我想这是质量下降的主要原因。
这类处理造成图像质量下降根本就属难免,就算用第三方控件,也没有消锯齿功能,至少我未见过。“一室”朋友还是将就吧!
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 图形、图象, picture, graph, image, draw。
|