Conservar proporción de imágenes

21/02/2005 - 16:12 por fernando | Informe spam
Hola,

Tengo una clase con un atributo de tipo bitmap. A ese atributo le asocio
distintas imágenes que tengo en varios ficheros. Lo que me gustarñia
hacer es poder almacenar las imágenes en otros ficheros jpeg, pero con
una resolución de 200x200 y conservando la proporción de la imagen original.

Es decir, supongamos que tengo una imagen de 600x450. Lo que quiero
hacer es reducirla para que ocupe ahora 200x200. Como la proporción es
distinta, y no quiero que aparezca la imagen deformada (que quede con un
aspecto alargado), me gustaría que quedase la imagen con una reolución
de 200x150 encuadrada en un cuadrad de 200x200.

¿Alguien sabe como hacerlo? Gracias

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
21/02/2005 - 20:15 | Informe spam
Hola Fernando,

no tengo ejemplo para mostrarte, pero la teoría sería que hicieras la
redimensión almacenándola en un atributo tipo bitmap o en un objeto tipo
Image.
Luego preparas la otra imagen de 200x200 y pones encima la que has
redimensionado de 200x150.

Obviamente, deberás calcular que aunque el ancho es de 200 y por tanto se
debe pintar en la posición del eje 0, la posición del alto será de (200 -
150) / 2 para que quede más o menos encuadrada en la imagen de 200x200 sobre
la que deberás pintar esta.

Un saludo,

Jorge Serrano Pérez
MVP VB.NET

"fernando" wrote:

Hola,

Tengo una clase con un atributo de tipo bitmap. A ese atributo le asocio
distintas imágenes que tengo en varios ficheros. Lo que me gustarñia
hacer es poder almacenar las imágenes en otros ficheros jpeg, pero con
una resolución de 200x200 y conservando la proporción de la imagen original.

Es decir, supongamos que tengo una imagen de 600x450. Lo que quiero
hacer es reducirla para que ocupe ahora 200x200. Como la proporción es
distinta, y no quiero que aparezca la imagen deformada (que quede con un
aspecto alargado), me gustaría que quedase la imagen con una reolución
de 200x150 encuadrada en un cuadrad de 200x200.

¿Alguien sabe como hacerlo? Gracias

Respuesta Responder a este mensaje
#2 fernando
23/02/2005 - 19:36 | Informe spam
Lo he estado intentanto, pero no lo consigo. ¿como puedo poner una
imegen de 200x150 encima de una de 200x200 ajustandola al centro?? No lo
consigo, aunque gracias por la ayuda.

Jorge Serrano [MVP VB] escribió:
Hola Fernando,

no tengo ejemplo para mostrarte, pero la teoría sería que hicieras la
redimensión almacenándola en un atributo tipo bitmap o en un objeto tipo
Image.
Luego preparas la otra imagen de 200x200 y pones encima la que has
redimensionado de 200x150.

Obviamente, deberás calcular que aunque el ancho es de 200 y por tanto se
debe pintar en la posición del eje 0, la posición del alto será de (200 -
150) / 2 para que quede más o menos encuadrada en la imagen de 200x200 sobre
la que deberás pintar esta.

Un saludo,

Jorge Serrano Pérez
MVP VB.NET

"fernando" wrote:


Hola,

Tengo una clase con un atributo de tipo bitmap. A ese atributo le asocio
distintas imágenes que tengo en varios ficheros. Lo que me gustarñia
hacer es poder almacenar las imágenes en otros ficheros jpeg, pero con
una resolución de 200x200 y conservando la proporción de la imagen original.

Es decir, supongamos que tengo una imagen de 600x450. Lo que quiero
hacer es reducirla para que ocupe ahora 200x200. Como la proporción es
distinta, y no quiero que aparezca la imagen deformada (que quede con un
aspecto alargado), me gustaría que quedase la imagen con una reolución
de 200x150 encuadrada en un cuadrad de 200x200.

¿Alguien sabe como hacerlo? Gracias

Respuesta Responder a este mensaje
#3 Pedro Luna Montalvo, MVP
23/02/2005 - 20:36 | Informe spam
Supongamos que tienes dos objetos Bitmap, digamos:

oImagenGrande que es tu imagen de 200 x 200
oImagenPequeña que es tu imagen de 200 x 150


Sigue los siguientes pasos:

' Obtenemos un objeto Graphics de la imagen grande
Dim oGraph As Graphics
oGraph = Graphics.FromImage(oImagenGrande)

' Calculamos la posicion donde se debe dibujar la imagen
' para que salga centrada
Dim x As Single = (oImagenGrande.Width - oImagenPequeña.Width) / 2
Dim y As Single = (oImagenGrande.Height - oImagenPequeña.Height) / 2

' Procedemos a dibujar el Bitmap pequeño sobre el grande
oGraph.DrawImage(oImagenPequeña, x, y)

' Liberamos el objeto Graphics y queda el Bitmap listo!!
oGraph.Dispose()


Luego de esto oImagenGrande ya tiene el Bitmap dentro de el y puedes
mostrarlo o guardarlo.


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"fernando" escribió en el mensaje
news:cvii0p$o53$
Lo he estado intentanto, pero no lo consigo. ¿como puedo poner una
imegen de 200x150 encima de una de 200x200 ajustandola al centro?? No lo
consigo, aunque gracias por la ayuda.

Jorge Serrano [MVP VB] escribió:
> Hola Fernando,
>
> no tengo ejemplo para mostrarte, pero la teoría sería que hicieras la
> redimensión almacenándola en un atributo tipo bitmap o en un objeto tipo
> Image.
> Luego preparas la otra imagen de 200x200 y pones encima la que has
> redimensionado de 200x150.
>
> Obviamente, deberás calcular que aunque el ancho es de 200 y por tanto


se
> debe pintar en la posición del eje 0, la posición del alto será de


(200 -
> 150) / 2 para que quede más o menos encuadrada en la imagen de 200x200


sobre
> la que deberás pintar esta.
>
> Un saludo,
>
> Jorge Serrano Pérez
> MVP VB.NET
>
> "fernando" wrote:
>
>
>>Hola,
>>
>>Tengo una clase con un atributo de tipo bitmap. A ese atributo le asocio
>>distintas imágenes que tengo en varios ficheros. Lo que me gustarñia
>>hacer es poder almacenar las imágenes en otros ficheros jpeg, pero con
>>una resolución de 200x200 y conservando la proporción de la imagen


original.
>>
>>Es decir, supongamos que tengo una imagen de 600x450. Lo que quiero
>>hacer es reducirla para que ocupe ahora 200x200. Como la proporción es
>>distinta, y no quiero que aparezca la imagen deformada (que quede con un
>>aspecto alargado), me gustaría que quedase la imagen con una reolución
>>de 200x150 encuadrada en un cuadrad de 200x200.
>>
>>¿Alguien sabe como hacerlo? Gracias
>>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida