以下代码放在模块中,其中 PicFileName 是图片文件的名称(包括完整路径),FormName为窗体名,PicConName 为PictureBox控件名。不知道这样的效果是不是你想要的?
Public Sub LoadPic(ByVal PicFileName As String, ByVal FormName As Form, ByVal PicConName As PictureBox)
Dim p As stdole.StdPicture
Dim iPicX As Long '图片文件的宽度
Dim iPicY As Long '图片文件的高度
On Error Resume Next
If PicFileName = "" Then
Set PicConName.Picture = Nothing
Exit Sub
End If
Set p = VB.LoadPicture(PicFileName) '取得图片的长宽信息(单位:缇)
If Err Then
MsgBox "不存在图片文件:" & PicFileName & Chr(13) & _
"文件连接出错,请删除连接!", vbOKOnly, "加载图片出错!"
Set PicConName.Picture = Nothing
Exit Sub
End If
iPicX = FormName.ScaleX(p.Width, 8, 1)
iPicY = FormName.ScaleY(p.Height, 8, 1)
If iPicX > 800 * 20 Or iPicY > 800 * 20 Then
MsgBox "图片太大,请把图片处理得小一些!", vbOKOnly + vbInformation, "提示:"
Exit Sub
End If
'加载图片,如果图片太大,按比例缩小至图片框大小
'NO.1:图片宽和高都小于图片框
Set PicConName.Picture = Nothing
If iPicX < PicConName.Width And iPicY < PicConName.Height Then
PicConName.PaintPicture p, (PicConName.Width - iPicX) / 2, (PicConName.Height - iPicY) / 2
End If
'NO.2:宽 or 高大于图片框宽 or 高,根据宽高的比例来决定对齐的方式
If iPicY >= PicConName.Height Or iPicX >= PicConName.Width Then
If (iPicX * PicConName.Height) >= (iPicY * PicConName.Width) Then
PicConName.PaintPicture p, 0, (PicConName.Height - PicConName.Width * iPicY / iPicX) / 2, PicConName.Width, PicConName.Width * iPicY / iPicX
Else
PicConName.PaintPicture p, (PicConName.Width - PicConName.Height * iPicX / iPicY) / 2, 0, PicConName.Height * iPicX / iPicY, PicConName.Height
End If
End If