软件注册站
热情软件屋

 
如何将Stretch=TRUE的ImageBox控件图像存盘
编号: QA000143    
建立日期: 1998年11月27日 最后修改日期: 2000年4月13日
所属类别: Visual Basic - 图形、图象
   
    在编程中,本人遇到了一些问题,虽经努力,但效果甚微,现将所遇到的问题列出:
    1.Imagebox 控件的Stretch=TRUE时,在Image框中,虽然可以显示缩放的图象,但是用Savepicture 函数存在硬盘上的图象仍然是原始尺寸的图象,不是所期望的Image框中显示的缩放后的图象。
    2.利用API函数StrechBlt()虽然可以实现,但存放在硬盘上缩放后的图象文件(.BMP),图象失真很严重,图象质量非常差,图象文件无法使用。
    望各位高手指点迷津(一室)
   
    你这个问题令我有点困惑。因为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

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio