有一图片大小为450x600像素
在Image控件中加载图片以后,如果控件比图片小,比如控件大小转换为像素是150x200,那么图片会非常模糊,如果在PS中将原始图片大小改为150x200像素,那么在Image控件中就比较清楚了
问:有什么方法直接在Image或Picture控件中将图片大小改变,比如说原始图片为450x600像素,在Image控件中加载的图片更改为150x200,有什么好的方法或者思路呢 
望各位大神支支招

解决方案 »

  1.   

    Image的Stretch属性,图片自动适应控件大小,picturebox的AutoSize属性,控件自动适应图片大小,楼主可以试试。
      

  2.   


    使得,有些比较特殊的照片确实会在缩小的时候变得"模糊", 原因在于其原始照片中比较"细小"的关键点在缩小的过程中被丢弃了. 
    举个极端的例子: 比如原来的照片展示了几根头发, 然后一缩小, 头发变成断断续续的东西了, 因为中间的某些部分被"缩"掉了.象StrichBlt这种"无脑缩放"就会发生上面这种"悲剧". 如果不想这样的话, 要自己写算法, 在去掉被"缩"掉的点之前先做判断. 不过速度上会比较慢一点, 并且保留下来的"细节"会带有误差,"(这取决于你使用色彩叠加"还是直接保留原像素等不同的算法了.)
      

  3.   

    用GDI+函数失真会比较小:Public Sub PreviewfromGdi(TempPaintvalue As Single, Temphidepicture As PictureBox, Tempshowpicture As PictureBox) '缩放图像
        Dim GpInput As GdiplusStartupInput
        Dim TempIm As Long
        Dim TempGp As Long
        Dim HdcScreen As Long
        Dim hBitmap As Long
        Dim HdcMem As Long
        Dim Ret As Long
        
        DeleteDC HdcMem
        HdcScreen = GetDC(0)    ' DC
        HdcMem = CreateCompatibleDC(HdcScreen)    ' 建立 DC
        hBitmap = CreateCompatibleBitmap(HdcScreen, Temphidepicture.Width * TempPaintvalue, Temphidepicture.Height * TempPaintvalue)    ' 建立点阵图
        Ret = SelectObject(HdcMem, hBitmap)    '  hDCMem
        Rectangle HdcMem, 0, 0, Temphidepicture.Width * TempPaintvalue, Temphidepicture.Height * TempPaintvalue
        GpInput.GdiplusVersion = 1
        If GdiplusStartup(Gdip_Token, GpInput) <> Ok Then
            MsgBox "Error loading GDI+!", vbCritical
            Exit Sub
        End If
        Call GdipCreateFromHDC(HdcMem, TempGp)    '获取Graphics对象的句柄MyG,与Picture绑定
        Temphidepicture.AutoSize = True
        Call GdipCreateBitmapFromHBITMAP(Temphidepicture.Picture.Handle, 0, TempIm)    '得到一个image对象
        GdipSetInterpolationMode TempGp, 7    'SMC_HighQualityBicubic,设置压缩质量
        Call GdipDrawImageRectI(TempGp, TempIm, 0, 0, Temphidepicture.Width * TempPaintvalue, Temphidepicture.Height * TempPaintvalue)
        BitBlt Tempshowpicture.hDC, 0, 0, Tempshowpicture.Width, Tempshowpicture.Height, HdcMem, (Temphidepicture.Width * TempPaintvalue - Tempshowpicture.Width) / 2, (Temphidepicture.Height * TempPaintvalue - Tempshowpicture.Height) / 2, vbSrcCopy    '从内寸复制到图片框,居中
        Call GdipDisposeImage(TempIm)    '/////当不需要image对象的时候需要释放
        Call GdipDeleteGraphics(TempGp)    '释放Graphics
        Call GdiplusShutdown(Gdip_Token)    '关闭GDI+
        DeleteDC HdcScreen
        DeleteObject hBitmap
    End SubAPI声明自己找:)