Ver Mensaje Individual
  #10 (permalink)  
Antiguo 09/08/2005, 12:54
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Borro el código anterior y posteo este. Funciona con imágenes cargadas (LoadPicture), como con las imágenes de un PictureBox o cualquier otro control con la propiedad Picture, tenga borde o no, tenga AutoSize o no.

Código:
' Devuelve el ancho real de un Picture en píxeles
Public Function ImagenAncho(ByRef p As Picture) As Integer
    ImagenAncho = p.Width / Screen.TwipsPerPixelX * 0.566893424036281
End Function


' Devuelve el alto real de un Picture en píxeles
Public Function ImagenAlto(ByRef p As Picture) As Integer
    ImagenAlto = p.Height / Screen.TwipsPerPixelY * 0.566893424036281
End Function


Para usarlo con una imagen en memoria:
Código:
Dim x As Picture
Set x = LoadPicture("C:\imagen.bmp")
MsgBox "Imagen en memoria: " & vbCrLf & ImagenAlto(x) & vbCrLf & ImagenAncho(x)


Para usarlo con un control con la propiedad Picture, como un PictureBox:
Código:
MsgBox "Imagen en PictureBox: " & vbCrLf & ImagenAlto(PictureBox.Picture) & vbCrLf & ImagenAncho(PictureBox.Picture)

Las funciones son simplemente una chapuza, pero aún lo es más VB si no proporciona una función que calcule todo esto. La proporción que he calculado (0.566893424036281) debería ser suficiente (en cuestión de decimales) para que los píxeles devueltos no tengan posibilidad de error en redondeo.

Teóricamente Screen.TwipsPerPixelX y Screen.TwipsPerPixelY son dependientes de la pantalla, he probado con diferentes resoluciones y parece que funciona bien, y no afecta a la proporción 0.566893424036281 sino que es la misma para todas. En cualquier caso, ruego precaución con este código y pruebas en las máquinas destino antes de usarlo continuadamente.

Como LoadPicture es propiamente de VB, no hay funciones de la API relacionadas y hay que inventarse esta clase de cosas. Usad la API, con funciones como LoadImage, mucho mejor.

Última edición por MaxExtreme; 09/08/2005 a las 12:59