Cómo escalar cualquier imagen en VB a un PictureBox de tamaño fijo y mantener la relación de aspecto original de la imagen
PictureBox (cuadro de imagen) es uno de los controles básicos utilizados para mostrar gráficos en Visual Basic. Se utiliza para mostrar información gráfica en una ubicación específica del formulario. Admite archivos de gráficos en múltiples formatos, incluido. archivos de mapa de bits (*.bmp, *.dib), archivos de iconos (*.ico), archivos de cursor (*.cur), metarchivos (*.wmf, *.emf), así como formatos de mapas de bits comprimidos populares en Internet. Archivos JPEG y archivos GIF. La característica más importante es la posibilidad de recurrir a él. Pero PictureBox solo tiene la propiedad de adaptarse automáticamente al tamaño de la imagen, pero no la propiedad de que la imagen se adapte al control.
La pregunta original es "escalar cualquier imagen a un PictureBox de tamaño fijo y mantener la relación de aspecto original de la imagen", lo que significa que la imagen no se puede deformar después de cargarla. Esto es más engorroso, pero el efecto es muy bueno, solo como referencia.
Preparación: Coloque dos controles PictureBox en el formulario. El largo y el ancho de Picture1 deben ser iguales (si según su "
la resolución de PictureBox es 500*200", la La imagen se deformará), un control CommonDialog y un control Command.
El código es el siguiente:
Opción explícita
Subcomando privado1_Click()
Dim imageWidth As Long
Dim imageHeight As Long
CommonDialog1.Filter = "(archivo de imagen)*.BMP; *.JPG; *.JPEG|*.BMP; *.JPG; *.JPEG" 'Se utiliza para seleccionar imágenes p>
CommonDialog1.FilterIndex = 0
CommonDialog1.Action = 1
Si CommonDialog1.FileName lt;gt "" Entonces
Picture2.Picture = LoadPicture(CommonDialog1.FileName)? 'Cargar la imagen en Pic2
If Picture2.ScaleWidth gt; Picture2.ScaleHeight Then
imageWidth = Picture1.ScaleWidth
imageHeight = Imagen1.ScaleHeight * Imagen2.ScaleHeight / Imagen2.ScaleWidth
Else
imageWidth = Imagen1.ScaleWidth * Imagen2.ScaleWidth / Imagen2.ScaleHeight
imageHeight = Imagen1 .ScaleHeight
Finalizar si
Imagen1.Cls
Imagen1.PaintImagen Imagen2, (Imagen1.ScaleWidth - imageWidth) / 2, (Imagen1. ScaleHeight - imageHeight) / 2, imageWidth, imageHeight, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight
Finalizar si
End Sub
Sub privado Form_Load () p>
Picture1.AutoRedraw = True 'Volver a dibujar la imagen
Picture1.AutoSize = False 'El tamaño del cuadro de imagen permanece sin cambios
Picture1.Visible = True
Picture1.BackColor = RGB(0, 255, 0) 'Establece el color de fondo del cuadro de imagen
Picture2.AutoSize = True 'Picture2 se escala automáticamente para ajustarse a la imagen y es invisible
Imagen2 .Visible = False
Comando1.Caption = "Seleccionar imagen"
End Sub
Este código pasó el prueba en VB6, y los resultados son los siguientes: