Visual Basic.NET - Propiedad SizeMode?

 
Vista:

Propiedad SizeMode?

Publicado por Angel (8 intervenciones) el 12/10/2008 08:02:29
Como sabran Visual Basic tiene una propiedad llamada SizeMode en los controles pictureBox, utilizo el valor de Zoom para que la imagen se vea en una escala aceptable, pero mi problema es que se distorciona bastante la imagen, (claro, no tanto como en Visual Basic 6 en los controles Image con su propiedad Stretch = true) conoce alguien algun metodo para escalar la imagen en un picturebox sin distorcionarla tanto?
Bueno, esto es lo que utilizaba en Visual Basic 6, eh tratado de implementar el codigo en el .NET y no me funciona el StdPicture, espero que me puedan ayudar a cambiarlo para .NET, o si tienen algun otro metodo espero que me lo puedan proporcionar.
Gracias.

'Codigo:
Public Function ScaleImage(Img As StdPicture, Pic As Object)
On Error Resume Next
Dim PLeft As Long, PTop As Long
Dim ReqWidth As Long, ReqHeight As Long
Dim HScale As Double, VScale As Double
Dim MyScale As Double
Dim ImgWidth As Long
Dim ImgHeight As Long
Dim SourceHDC As Long

'Escala en pixles y Autoredraw para el Picturebox
Pic.ScaleMode = vbPixels
Pic.AutoRedraw = True

'Limpia la imagen
Pic.Cls

' Convierte el valor de Himetric a pixeles
ImgWidth = Me.ScaleX(Img.Width, vbHimetric, vbPixels)
ImgHeight = Me.ScaleY(Img.Height, vbHimetric, vbPixels)

' Escala horizontal y vertical
HScale = Pic.ScaleWidth / ImgWidth
VScale = Pic.ScaleHeight / ImgHeight

MyScale = IIf(VScale >= HScale, HScale, VScale)

ReqWidth = ImgWidth * MyScale
ReqHeight = ImgHeight * MyScale

'Posición izquierda y Arriba, para centra el gráfico: valores x y
PLeft = (Pic.ScaleWidth - ReqWidth) / 2
'PTop = (pic.ScaleHeight - ReqHeight) / 2

SourceHDC = CreateCompatibleDC(0)
DeleteObject SelectObject(SourceHDC, Img.Handle)

SetStretchBltMode Pic.hdc, vbPaletteModeNone

' Si es un ícono usa PaintPicture, si no StretchBlt
If Img.Type = 3 Then
Pic.PaintPicture Img, PLeft, PTop, ReqWidth, ReqHeight
Else
'Copia el gráfico en el PictureBox
StretchBlt Pic.hdc, PLeft, PTop, ReqWidth, ReqHeight, _
SourceHDC, 0, 0, ImgWidth, ImgHeight, vbSrcCopy

'Libera el dispositivo
DeleteDC SourceHDC

End If

End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder