vb如何把任意图片缩放到固定大小的PictureBox并保持图片原来的宽高比

2024-11-13 09:21:04
推荐回答(1个)
回答1:

        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测试通过,结果如下: