Autor Tema: ucImage: Detectar tamaño  (Leído 9277 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
ucImage: Detectar tamaño
« en: Noviembre 03, 2014, 09:22:49 pm »
Se me ha presentado esta inquietud.

Por ejemplo tengo dos imagenes que pesan casi lo mismo, pero una es vertical y la otra horizontal. El problema que tengo es  que el control ucImage lo tengo con scalemode en 1 (stretch) y esto lo tengo asi para que la foto no rebase del espacio que le designe. El problema es que si "la foto" es larga la imagen se achata quedando antiestetico y lo mismo a la inversa.

¿Como podría resolverlo para que quede de forma estética? Se me ocurre que quizá deba capturar el tamaño de la imagen (ancho y alto) y según eso modificar el width y el heigt del ucImage ¿asi seria? o hay una otra forma mejor? de momento el ucImage lo tengo como un cuadrado porque el +/-80% de las imagenes queda bien pero el restante no y esto se traduce en unas 200 fotos "feas".

Agradezco cualquier comentario

Saludos
Me encuentras en YAcosta.com

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #1 en: Noviembre 03, 2014, 11:07:41 pm »
No entendi el problema. Tenes 2 imagenes que aparentemente una es mas "ancha" que "alta" (horizontal) y otra que es mas "alta" que "ancha" (vertical)?

Si tenes una imagen y queres que entre en un espacio menor, tenes 2 opciones.
* La primera es resizearlo para que el "mayor" tamaño se reduzca para que entre en tu lugar (obviamente que se reduce en alto y ancho de misma forma).
* La segunda es detectar el "menor" tamaño, y escalar la imagen para que ese tamaño coincida con tu lugar. Obviamente que va a "sobrar" partes de la imagen, y vas a tener que recortarla.
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #2 en: Noviembre 03, 2014, 11:27:15 pm »
Master Yacosta:
  Yo no utilizo el ucImage, pero utilizo esta rutina para centrar la imagen a escala en una PictureBox de tamaño fijo, quizas con algunos retoques le pueda servir...

Código: (VB) [Seleccionar]
Option Explicit

Private Pic As IPictureDisp

'Subrutina que dibuja el gráfico en el control Picture en forma centrada y a escala
 '*******************************************************
Sub DrawPic(Objeto As Object, Path_Imagen As String)
On Error GoTo ErrSub
   Dim Pos_x As Single
   Dim Pos_y As Single
   Dim Ancho_IMG As Single
   Dim Alto_IMG As Single
   Dim Ancho_Obj As Single
   Dim Alto_Obj As Single
   Dim Old_Scale As Single

Set Pic = LoadPicture(Path_Imagen)

With Objeto
    .AutoRedraw = True
    .Cls
    Old_Scale = .ScaleMode
    .ScaleMode = vbPixels
    Ancho_IMG = .ScaleX(Pic.Width, vbHimetric, vbPixels)
    Alto_IMG = .ScaleY(Pic.Height, vbHimetric, vbPixels)
    Ancho_Obj = .ScaleWidth
    Alto_Obj = .ScaleHeight
   
    If Ancho_IMG > Ancho_Obj Then
        Alto_IMG = Alto_IMG * Ancho_Obj / Ancho_IMG
        Ancho_IMG = Ancho_Obj
    End If
    If Alto_IMG > Alto_Obj Then
        Ancho_IMG = Ancho_IMG * Alto_Obj / Alto_IMG
        Alto_IMG = Alto_Obj
    End If
    Pos_x = (Ancho_Obj - Ancho_IMG) / 2
    Pos_y = (Alto_Obj - Alto_IMG) / 2
End With
   
   Objeto.PaintPicture Pic, Pos_x, Pos_y, Ancho_IMG, Alto_IMG
   Objeto.ScaleMode = Old_Scale
   Exit Sub
   
'Error
ErrSub:
    If Err.Number = 76 Then
       Objeto.Cls
       Exit Sub
    Else
       MsgBox Err.Description, vbCritical
    End If
End Sub

Espero le sirva...

Saludos Cordiales

_____________________________
Sé un poco de todo y mucho de nada... ;)

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 #3 en: Noviembre 04, 2014, 12:00:32 am »
Gracias amigo, lo voy a checar a ver que me resulta.

Saludos
Me encuentras en YAcosta.com

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #4 en: Noviembre 04, 2014, 08:49:27 am »
Master Yacosta:
  Yo no utilizo el ucImage, pero utilizo esta rutina para centrar la imagen a escala en una PictureBox de tamaño fijo, quizas con algunos retoques le pueda servir...

Código: (VB) [Seleccionar]
Option Explicit

Private Pic As IPictureDisp

'Subrutina que dibuja el gráfico en el control Picture en forma centrada y a escala
 '*******************************************************
Sub DrawPic(Objeto As Object, Path_Imagen As String)
On Error GoTo ErrSub
   Dim Pos_x As Single
   Dim Pos_y As Single
   Dim Ancho_IMG As Single
   Dim Alto_IMG As Single
   Dim Ancho_Obj As Single
   Dim Alto_Obj As Single
   Dim Old_Scale As Single

Set Pic = LoadPicture(Path_Imagen)

With Objeto
    .AutoRedraw = True
    .Cls
    Old_Scale = .ScaleMode
    .ScaleMode = vbPixels
    Ancho_IMG = .ScaleX(Pic.Width, vbHimetric, vbPixels)
    Alto_IMG = .ScaleY(Pic.Height, vbHimetric, vbPixels)
    Ancho_Obj = .ScaleWidth
    Alto_Obj = .ScaleHeight
   
    If Ancho_IMG > Ancho_Obj Then
        Alto_IMG = Alto_IMG * Ancho_Obj / Ancho_IMG
        Ancho_IMG = Ancho_Obj
    End If
    If Alto_IMG > Alto_Obj Then
        Ancho_IMG = Ancho_IMG * Alto_Obj / Alto_IMG
        Alto_IMG = Alto_Obj
    End If
    Pos_x = (Ancho_Obj - Ancho_IMG) / 2
    Pos_y = (Alto_Obj - Alto_IMG) / 2
End With
   
   Objeto.PaintPicture Pic, Pos_x, Pos_y, Ancho_IMG, Alto_IMG
   Objeto.ScaleMode = Old_Scale
   Exit Sub
   
'Error
ErrSub:
    If Err.Number = 76 Then
       Objeto.Cls
       Exit Sub
    Else
       MsgBox Err.Description, vbCritical
    End If
End Sub

Espero le sirva...

Saludos Cordiales


buen diaa....... y como llamas a esa funcion ?

saludos

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:ucImage: Detectar tamaño
« Respuesta #5 en: Noviembre 04, 2014, 10:09:24 am »
Muy bueno esta esto Axio.


Asi podes llamar gasafonso

Código: (VB) [Seleccionar]
Call DrawPic(Picture1, "c:\fotos\a.jpg")
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #6 en: Noviembre 04, 2014, 10:14:43 am »
gracias ENTER !!!!!!

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 #7 en: Noviembre 04, 2014, 01:04:09 pm »
Ayer no tuve tiempo y hoy en la mañana tampoco, en la tarde la estoy probando pero queria preguntar por si aca alguien mas lo prueba ese codigo del amigo AxioUK ¿funciona con archivos PNG? porque eso es lo que cargo  al control ucImage. No se si ese LoadPicture(Path_Imagen) que setea la variable PIC definida como IPictureDisp podra reconocer el archivo png. Si alguien me lo puede confirmar porfa
Me encuentras en YAcosta.com

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:ucImage: Detectar tamaño
« Respuesta #8 en: Noviembre 04, 2014, 01:38:31 pm »
No amigo YAcosta, no funcionas con archivos PNG, por lo menos ami, si alguien lo hace que lo publique en el foro

gracias

Gaston

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 #9 en: Noviembre 04, 2014, 03:19:43 pm »
Gracias gasafonso, es lo que imaginaba. En mi soft la foto la cargo siguiendo este modelo:

ucImage.LoadImageFromFile RutaAlArchivoPNG

Entonces, antes de asignárselo al control debería saber el ancho y el alto de la fotografía PNG para que dependiendo de eso modifique también el ancho y el alto del control ucImage y mantener la estetica de la imagen fotográfica. Creo que debería usar otros métodos (que desconozco) para poder averiguar las propiedades del archivo png antes de su carga.


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 #10 en: Noviembre 04, 2014, 03:47:37 pm »
Creo que me valdre de este clase
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/48.htm#2

Espero no mas no entre en conflicto con el ucImage.
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 #11 en: Noviembre 04, 2014, 04:29:39 pm »
Ya esta, funciona perfecto, chequee el codigo y obviamente la clase no crea ningun conflicto con el ucImage. La cargue y la invoque con un par de lineas pasando de forma automatica de esto:



a esto:




Gracias a todos por su interes. Saludos
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:ucImage: Detectar tamaño
« Respuesta #12 en: Noviembre 04, 2014, 05:38:13 pm »
Hola YAcosta, como se llama el control que usas para mostrar tu lista de articulos.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

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 #13 en: Noviembre 04, 2014, 07:23:15 pm »
Se llama  ucImage + Shape + Labels

A veces no es necesario complicarse tanto.

:-)

PD: Todos los controles pertenecen a una matriz de controles. Luego es codigo.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:ucImage: Detectar tamaño
« Respuesta #14 en: Noviembre 04, 2014, 11:21:29 pm »
El ucImage tiene otras formas de escalado, hay 2 que hacen lo que dijo coco arriba. Básicamente como el fondo de pantallas de windows. Achicar hasta que entre en proporción. Y agrandar en proporción cortando la imagen hasta que entre