Autor Tema: ucImage: Detectar tamaño  (Leído 9276 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ucImage: Detectar tamaño
« Respuesta #15 en: Noviembre 04, 2014, 11:44:24 pm »
Hola Raul, se me había pasado por completo el post de Coco porque en ese momento aun no sabia como capturar el tamaño de la foto original.

Lo cierto es que las 200 imágenes que ponga no las conozco y las cargo dinámicamente, es mas, las va a poner el usuario. Entonces no me queda claro si finalmente terminé haciendo lo que indicas (creo que si).

Básicamente me valí de la clase que publique arriba para detectar el ancho y alto de la imagen e invocarlo con una sola linea de código, la que llama a una funcioncita donde evalúo si es mas ancho que alto o mas alto que ancho (las que son cuadradas no las toco) y según eso cambio en tiempo de ejecución el tamaño del ucImage y listo con eso resolví el tema. Todo esto para PNGs.


--------------------------
La verdad y solo de cargoso quiero ser aun mas exacto en el tamaño del ucImage pero ya solo por una mariconada visual, para que la foto se vea aun mejor. A ver si me enrrollo un poco y si se me entiende.

El tamaño máximo del área ocupada por el ucImage es un cuadrado de 6000 x 6000 (creo que son pixeles, la que usa vb), bueno, hay foto mas pequeñas que eso y hay fotos mas grandes, las que son pequeñas las agrando hasta 6000x6000 y las mas grandes las reduzco, pero en el caso de una foto digamos de 3000 por 200 (un lapicero digamos) la debo agrandar hasta 6000 x 400, si la mando de frente el lapicero quedará gordo y por eso deberé reducir el width del ucImage hasta los 400. De allí que estoy probando con proporciones y poder tener la imagen lo mas estética posible.

De momento solo estoy detectando las que son casi el doble de tamaño para multiplicar por un factor y con eso el 99% de las fotos ya se ven mucho mejor a diferencia de antes.

Saludos
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ucImage: Detectar tamaño
« Respuesta #16 en: Noviembre 05, 2014, 12:21:07 am »
En esta seccion de codigo invoco al procedimiento:

Código: (VB) [Seleccionar]
....
      If Len(ucMiFoto) > 0 Then
         picFoto(0).LoadImageFromFile memGlobalRutaImagen & IdFoto & ".png"
         Call ColocaFoto(Index)
         Shape1(Index).BackColor = &HAA6E21
         Shape1(Index).BorderColor = vbWhite
         
         Call infoFoto(IdFoto) '<--------- Esta linea es lo que aumente
         picFoto(0).Visible = True
...

Y este es el código que modifica al ucImage.

Código: (VB) [Seleccionar]
Private Sub infoFoto(IdFoto As Integer)
Dim Ruta As String
Ruta = memGlobalRutaImagen & IdFoto & ".png"
cImgInfo.ReadImageInfo Ruta
   
Alto = cImgInfo.Height
Ancho = cImgInfo.Width

If Alto >= Ancho + (Ancho * 0.7) Then 'El valor 0.7 es chapucero, esta tanteado.
   picFoto(0).Width = 3400
ElseIf Ancho >= Alto + (Alto * 0.7) Then
   picFoto(0).Height = 3400
Else
  picFoto(0).Width = 6735
  picFoto(0).Height = 6735
End If
End Sub

Aqui se ve que ya varias imágenes mas largas ya se ven bien y viceversa, salvo algunos muy pocos casos que ya puliré.

[youtube]cmJZQ0y1-HE[/youtube]
Me encuentras en YAcosta.com

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #17 en: Noviembre 05, 2014, 12:46:12 am »
hola Yvan, lo que te dijo Raul es

Código: [Seleccionar]
ucImage1.ScaleMode = eScale
eso ajusta la imagen proporcionalmente.

después a (modo de información) si en GDI+ queres saber como obtener las medias de las imágenes se utilizan o se utiliza estas apis

Código: [Seleccionar]
Private Declare Function GdipGetImageWidth Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Long) As Long
Private Declare Function GdipGetImageHeight Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mHeight As Long) As Long
o
Código: [Seleccionar]
Private Declare Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As Long
no me explayo mas porque quizás con la primera respuesta ya te alcanza, cualquier cosa avisa.
Saludos.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ucImage: Detectar tamaño
« Respuesta #18 en: Noviembre 05, 2014, 01:30:10 am »
Diantres!!!  Diantres!!!  Diantres!!!  Diantres!!!  Diantres!!!

Perdona Raul no te había entendido (también Coco), gracias Lea por aclararme.

ucImage1.ScaleMode = eScale era la solución a todos mis problemas.

Mi excusa es que siempre he usado 1.- eStretch pensando que los otros modos me cambiaron el tamaño del ucImage (haciéndolo mas grande que 6000x6000 o mas chico que eso porque eso me habia pasado con el 0- ActualSize) y que en esa proporción ajustaba los lados pero siempre modificandome el tamaño del control.... que patinada...

Ya con eso quedó mucho mas que resuelto, ya no es necesario usar la clase y borrare tambien el código que puse... ah caramba... mas viejo mas ciego.

Gracias amigos por su paciencia.
« última modificación: Noviembre 05, 2014, 01:31:47 am por YAcosta »
Me encuentras en YAcosta.com

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #19 en: Noviembre 05, 2014, 05:52:19 pm »
diantre

m. col. Demonio, diablo:
¡diantre de niño, qué malo es!
♦ Es un eufemismo.
interj. col. Expresa enfado o sorpresa:
¡diantre, eres el último a quien esperaba ver!


Interesante  :D los Argentinos diriamos:

1 Que lo repario!

o en su defecto

2 chasumaaadre.


YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:ucImage: Detectar tamaño
« Respuesta #20 en: Noviembre 05, 2014, 06:14:01 pm »
Ah claroo, en realidad soy mas grosero de lo que aparento y quise ser "delicado" jajaja. Incluso "diantres" o "diantre" está en desuso igual que "caspita" jajaja.

Me encuentras en YAcosta.com