PictureBox(图片框)是Visual Basic中用来显示图形的基本控件之一,用于在窗体指定位置显示图形信息,它支持多种格式的图形文件,包括位图文件(*.bmp,*.dib)、图标文件(*.ico)、光标文件(*.cur)、图元文件(*.wmf,*.emf),还有Internet 上流行的压缩位图格式的JPEG文件和GIF文件。最重要的功能是可以在它上面绘图。但是PictureBox只有自动适应图片大小的属性,而没有图片适应控件的属性。
原题要“把任意图片缩放到固定大小的PictureBox并保持图片原来的宽高比”,也就是加载以后图片不能变形。这样比较繁琐一些,但是效果很好,仅供你参考。
准备:在窗体上放置两个PictureBox控件,Picture1的长宽要相同(要是按照你的“
PictureBox分辨率为,500*200”,图像就变形了!),一个CommonDialog控件,一个Command控件。
代码如下:
Option Explicit
Private Sub Command1_Click()
Dim imageWidth As Long
Dim imageHeight As Long
CommonDialog1.Filter = "(图片文件)*.BMP;*.JPG;*.JPEG|*.BMP;*.JPG;*.JPEG" '用来选择图片
CommonDialog1.FilterIndex = 0
CommonDialog1.Action = 1
If CommonDialog1.FileName <> "" Then
Picture2.Picture = LoadPicture(CommonDialog1.FileName) '图片加载到Pic2
If Picture2.ScaleWidth > Picture2.ScaleHeight Then
imageWidth = Picture1.ScaleWidth
imageHeight = Picture1.ScaleHeight * Picture2.ScaleHeight / Picture2.ScaleWidth
Else
imageWidth = Picture1.ScaleWidth * Picture2.ScaleWidth / Picture2.ScaleHeight
imageHeight = Picture1.ScaleHeight
End If
Picture1.Cls
Picture1.PaintPicture Picture2, (Picture1.ScaleWidth - imageWidth) / 2, (Picture1.ScaleHeight - imageHeight) / 2, imageWidth, imageHeight, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight
End If
End Sub
Private Sub Form_Load()
Picture1.AutoRedraw = True '重绘图片
Picture1.AutoSize = False '图片框大小不变
Picture1.Visible = True
Picture1.BackColor = RGB(0, 255, 0) '设置图片框背景颜色
Picture2.AutoSize = True 'Picture2自动缩放以适应图片,不可见
Picture2.Visible = False
Command1.Caption = "选择图片"
End Sub
该代码在VB6测试通过,结果如下: