有一图片大小为450x600像素
在Image控件中加载图片以后,如果控件比图片小,比如控件大小转换为像素是150x200,那么图片会非常模糊,如果在PS中将原始图片大小改为150x200像素,那么在Image控件中就比较清楚了
问:有什么方法直接在Image或Picture控件中将图片大小改变,比如说原始图片为450x600像素,在Image控件中加载的图片更改为150x200,有什么好的方法或者思路呢
望各位大神支支招
在Image控件中加载图片以后,如果控件比图片小,比如控件大小转换为像素是150x200,那么图片会非常模糊,如果在PS中将原始图片大小改为150x200像素,那么在Image控件中就比较清楚了
问:有什么方法直接在Image或Picture控件中将图片大小改变,比如说原始图片为450x600像素,在Image控件中加载的图片更改为150x200,有什么好的方法或者思路呢
望各位大神支支招
使得,有些比较特殊的照片确实会在缩小的时候变得"模糊", 原因在于其原始照片中比较"细小"的关键点在缩小的过程中被丢弃了.
举个极端的例子: 比如原来的照片展示了几根头发, 然后一缩小, 头发变成断断续续的东西了, 因为中间的某些部分被"缩"掉了.象StrichBlt这种"无脑缩放"就会发生上面这种"悲剧". 如果不想这样的话, 要自己写算法, 在去掉被"缩"掉的点之前先做判断. 不过速度上会比较慢一点, 并且保留下来的"细节"会带有误差,"(这取决于你使用色彩叠加"还是直接保留原像素等不同的算法了.)
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声明自己找:)