PDA

Ver la Versión Completa : TJpegImage en BDS 2006


johurgi
25-10-2006, 11:16:53
Hola a tod@s

Estoy programando una aplicacion sobre Delphi.Net en BDS2006, en la cual tengo que tratar imagenes tanto jpeg como bitmaps, cual es mi sorpresa cuando descubro que la unidad referente a los jpeg´s no esta. Y la necesito ya que sin esta no puedo tratar los jpeg´s. Alguien se le ocurre alguna forma de tratar los jpeg´s desde VCL.NET.

Gracias de antemano.

dec
25-10-2006, 12:00:19
Hola,

Se me ocurre que ya se cuente con soporte "nativo" para ese tipo de imágenes... ¿probaste y comprobaste si efectivamente no es posible añadir ese tipo de imágenes en tu proyecto?

johurgi
25-10-2006, 12:04:54
El tipo TJpegImage con el cual son tratadas las imagenes jpeg en delphi no se encuentra en la VCL.NET encambio TBitmap si que se encuentra. De que forma puedo tratar las imagenes jpeg´s.

gluglu
25-10-2006, 13:45:10
Efectivamente como dice David, BDS 2006 ya debe llevar incorporado el código 'nativo' de las imágenes JPEG.

Yo trabajo con ellas en VCL.Net sin ningún problema. En principio uso para ello el componente propio del BDS, TImage.

johurgi
25-10-2006, 16:34:34
Entonces que haces para escalarlas, cambiarlas a bmp ya que tengo que insertarlas en una base de datos y para mostrarlos en un DBImage.

dec
25-10-2006, 16:52:43
Hola,

La verdad es que mi respuesta no estaba suficientemente pensada, me parece. Puede ser (como parece confirmar gluglu) que con la VCL. NET se puedan usar imágenes en formato JPG, directamente, con el componente "TImage", es decir, sin necesidad de añadir unidad alguna para ello.

Entonces, acaso "cambiarlas" a BMP puede ser tan sencillo como guardar dichas imágenes como tales, es decir, una vez que tengas las JPG en el "TImage" es posible que ya puedas guardarlas como BMP sin más. Lo mismo puede valerte para guardarlas en la base de datos y para mostrarlas en el "DBImage".

Peeeeeero... ¿qué pasa con los métodos específicos del objeto "TJpegImage"? Por ejemplo, ¿qué pasa con la calidad de la imagen JPG que puede establecerse mediante el correspondiente método o propiedad? Y aquí es donde mi respuesta no estaba muy pensada... porque omití este DETALLE.

Tal vez exista para .NET un objeto que te permita trabajar con imágenes JPG aprovechando las características de estas que no están presentes en las imágenes BMP. Tal vez no en la VCL .NET que proporciona Borland, pero, es probable que encuentres algo "por ahí"...

gluglu
25-10-2006, 18:00:10
Desconozco las utilidades que había anteriormente para imágenes BMP.

Tampoco sé exáctamente a qué te refieres cuando hablas de 'escalar' las imágenes. Con el componente TImage puedes cambiar el tamaño como quieras de la presentación en pantalla, y con la propiedad Strech la imágen siempre se adaptará al tamaño del componente.

En cuanto a grabarlas en tu base de datos, EN PRINCIPIO sin problema. Digo esto con muchísima precaución porque yo tuve desde mis principios serios problemas que NO he podido resolver, para grabar imágenes en mi base de datos InterBase 7.5 mediante campos blob, cuyo tamaño exceda de 32 KB.

Por más vueltas que le dí en su momento e incluso consultas con Borland, no pude, ni al día de hoy he encontrado solución a ese tema. Por lo que me las tuve que ingeniar por mi cuenta.

Lo que hago, y funciona perfectamente, es trocear la imágen en bloques de 32 KB y grabar estos de manera 'secuencial' (con su correspondiente campo) en la BBDD. Al recuperar, hago lo mismo pero a la inversa. De esa manera tengo basada toda mi aplicación en cuanto a imágenes se refiere.

Este GRAN inconveniente te provoca que no puedas utilizar el TDBImage directamente con imágenes mayores de 32 KB.

Todo esto se refiere EXCLUSIVAMENTE al entorno VCL.Net, y no me ocurre en VCL para Win32.

Espero haberte servido de ayuda. Un saludo.

johurgi
25-10-2006, 19:05:29
Gracias a los dos por las respuestas. Me habeis aclarado bastante aunque voy a ver si me explico bien.

Tengo que coger de un directorio imagenes que pueden estar en distinto formato 'bmp' o 'jpg', con esa imagen tengo que guardarla en la base de datos(no es problema), y tengo que mostrar todas las imagenes en DBImages.

Me explico si la imagen tiene un tamaño de 200x200 y el componente tiene un tamaño de 100x100, solo se vera un trozo de la foto, por eso lo de escalar la foto(cambiarle el tamaño de 200x200 a 100x100) para que en el dbimage se vea como toca la imagen.

En VCL se podia realizar todas estas operaciones ya que tenia la unidad TJpegImage que con sus propiedades, me daba la capacidad de escalar un imagen, darle mas calidad,etc...

El problema viene cuando se migra a VCL.NET que en este caso no poseo esa unidad en la VCL.NET con la cual yo podia hacer todo el tratamiento de las imagenes jpeg que yo tuviera.

Un saludo

dec
25-10-2006, 19:11:37
Hola,

¿El componente "DBImage" no cuenta con una propiedad "Strech"? Si es así tal vez sea la que tienes que emplear en tu caso, en el sentido de que de este modo la imagen "se adaptará" al tamaño del componente que la muestra. ¿No? ;)

johurgi
26-10-2006, 13:08:09
El componente dbImage con la opcion stretch lo que hace es deformar la foto, agrandarla de tal forma que ocupe todo el dbimage. En caso de imagenes grandes si que se ve bien, en imagenes pequeñas se ve mal, no guarda las proporciones.

Por lo que he estado mirando con solo añadirle al bds en el search path la ruta para que encuentre los ficheros necesarios a esa unidad en concreto(jpeg) bastaria para que ya funcionara en .net.

Los ficheros son jpeg.dcuil,jpeg.pas....

gluglu
27-10-2006, 10:29:34
Estoy de acuerdo que la propiedad Strech te puede deformar la imagen.

Para ello me he creado mi propia rutina de redimensionamiento del componente TImage para adaptarlo al tamaño que yo deseo, y no deformar precisamente la imagen que quiero mostrar.

Basta con mantener el ratio ancho-alto de la imagen original.

johurgi
27-10-2006, 12:23:57
Esto funciona bajo VCL.NET, todo mi problema reside en .net. A mi antes en la VCL estandard me funcionaba todo perfectamente pero ahora al migrar a .NET, no le sale de las narices funcionar.