Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Tamaño de Imagen

Estas en el tema de Tamaño de Imagen en el foro de Visual Basic clásico en Foros del Web. Cómo obtener el tamaño de una Imagen??????? Trato de hacerlo con por ejemplo Picture.Height pero no me da exacto, el tamaño que me da es ...
  #1 (permalink)  
Antiguo 06/08/2005, 08:48
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Tamaño de Imagen

Cómo obtener el tamaño de una Imagen???????
Trato de hacerlo con por ejemplo Picture.Height pero no me da exacto, el tamaño que me da es más grande.......
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #2 (permalink)  
Antiguo 06/08/2005, 12:15
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
No te da exacto porque incluye bordes del control...
  #3 (permalink)  
Antiguo 08/08/2005, 11:27
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación

Cita:
Iniciado por MaxExtreme
No te da exacto porque incluye bordes del control...
En realidad no, pues la diferencia es demasiado grande..... el doble y algo más ....
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 08/08/2005, 14:15
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por David el Grande
En realidad no, pues la diferencia es demasiado grande..... el doble y algo más ....
Entonces el problema son las unidades. VB tiene su propio "sistema de medida" que no va por píxeles.
  #5 (permalink)  
Antiguo 08/08/2005, 14:24
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
de hecho el que vb utiliza es Twip(de Vb) cambiale eso como medida del form y se tendría que solucionar...

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #6 (permalink)  
Antiguo 09/08/2005, 11:06
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pues tampoco lo de los píxeles es el problema, pues ya lo probé con:
Código:
Picture1.Height / Screen.TwipsPerPixelY
y tampoco que me dá exacto...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 09/08/2005, 11:34
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
¿Cuánta es la diferencia? ¿Sigue siendo mucha?
  #8 (permalink)  
Antiguo 09/08/2005, 11:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo

Si, aún es grande la diferencia
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 09/08/2005, 12:11
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pero el problema no es con el PictureBox, sino con una Imagen en Memoria cargada con LoadPicure, o simplemente teniendo el Handle de la Imagen...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 09/08/2005, 12:54
 
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
  #11 (permalink)  
Antiguo 10/08/2005, 11:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Busqueda

Es una pregunta algo tonta la que voy a hacer, pero please, si alguien tiene la bondad de responerme:
¿Una imagen solo puede tener tamaño entero en pixeles, o sea por ejemplo 32x32? ¿O puede tener decimales?
Me imagino que no, pues como guardará por ejemplo la mitad de un punto, pero lo pregunto porque no tengo certeza
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:18.