PDA

Ver la Versión Completa : lo más facil no me sale


Espartaco
14-11-2006, 14:01:49
Hola amigos, creo que es una tonteria pero no lo consigo.
Tengo un DB en Paradox con un campo Graphic. Ahí almaceno gráficos en bmp. Lo prefiero así, porque me ocupan muy poco y son realmente pocos gráficos. Para grabarlos en la DB utilizo el TDBimage y el OpenPictureDialog y no tengo problemas.
El problema viene cuando quiero cargar la foto en un TImage desde la DB. He probado un monton de formas y siempre me dice 'tipos incompatibles', pues uso la propiedad graphic del Timage, por ejemplo, y me dice que no es compatible TGraphic con Variant. Pongo esto:

Image1.Picture.Graphic:=Table1['IMAGEN'];

Podríais ayudarme?

Muchas gracias.:o

oscarnoe
14-11-2006, 14:09:56
Hola Espartaco,

prueba a cargarlo como un stream, si buscar Tblobstream en el foro seguro que encontraras algo que te ayude.

Espero que te sea de ayuda

Oscar Noe

Bicho
14-11-2006, 22:02:26
Hola, por favor para otras veces, intenta poner títulos más descriptivos a los mensajes, eso ayudará un montón a la gente que tenga el mismo problema y pueda encontrar una solución aquí usando el buscardor (http://www.clubdelphi.com/foros/search.php)
En definitiva échad un vistazo a la Guía de Estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Un saludo

Espartaco
15-11-2006, 09:03:55
Pedrón bicho, llevas razón, la próxima vez lo haré así.

Oscarnoe, después de leer todo el foro de gráficos, ya había visto un hilo que hablaba de algo muy similir usando TBlobStream, lo que pasa es que era con jpg y he intentado usarlo con bmp cambiando por un TBitmap pero cuando intenta cargar el campo gráfico en el Timage me dice que el bitmap no es válido y no sé por qué, porque si visualizo el campo con un TDBimage aparece éste perfectamente. La verdad estoy un poco desesperado.
De todas formas si puedes me pones un poco de código, es que soy un poco novato en esto.

Gracias por contestar tan rápido.:confused:

oscarnoe
15-11-2006, 10:36:17
si es bitmap es timage.picture.bitmap, si no me equivoco.

Espartaco
15-11-2006, 10:45:26
Eso es oscarnoe, pero resulta que tengo que cargar la imagen desde la base de datos de esta manera:

timage.picture.bitmap:=tabla1['imagen']

y al compilar me dice tipos imcompatibles Tbitmap y Variant.

Ahí es donde está el problema, sabrías como solucionarlo?

Muchas gracias de antemano.;)

oscarnoe
15-11-2006, 11:03:53
pues deberias hacer lo mismo que con un jpeg, cargarlo con un stream

Espartaco
15-11-2006, 11:21:47
Ya, he intentado lo que pone neftali en otro hilo de este foro como pone él en su mensaje:


Código Delphi [-] (http://www.clubdelphi.com/foros/#) procedure TForm1.JpegBlobToImage();
var
Stream: Tblobstream;
img: Tjpegimage;
begin
// Cargar el campo Blob en un Stream
Stream := Tblobstream.Create(TBlobField(Table1.fieldbyname('Imagen')), bmRead);
// Crear la Imagen
img := Tjpegimage.Create();
// Cargar la imagen con el Stream
img.loadfromstream(Stream);
// Pasarla a un control IMage
image1.picture.assign(img);
// Liberar
img.free;
Stream.free;
end;






Para hacerlo con un TBitmat ha cambiado la linea


Código Delphi [-] (http://www.clubdelphi.com/foros/#)img: Tjpegimage;




por


Código Delphi [-] (http://www.clubdelphi.com/foros/#)img: TBitmap;



y la línea:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)img := Tjpegimage.Create();



por


Código Delphi [-] (http://www.clubdelphi.com/foros/#)img := TBitmap.Create();




pero esto me da en tiempo de ejecución un error de 'Bitmap no válido', y el contenido del campo está bien y no está dañado.

Por qué ocurre esto?

Gracias otra vez por el interés oscarneo.

oscarnoe
15-11-2006, 12:34:42
creo que las lineas que cargan la imagen en el control deberia ser algo como (de memoria sin confirmarlo)


image1.picture.bitmap:= TBitmap.Create;
image1.picture.bitmap.loadfromstream(stream);


espero qeue te sea de ayuda.

Oscar Noe

Espartaco
15-11-2006, 14:26:47
he probado tu código y me sigue diciendo lo mismo:

'Bitmap image is not valid'

Estoy desesperao, porque tengo el programa estancado con esto ya que tengo que mostrar lo que hay en la base de datos y sólo lo puedo hacer con un TDBImage.

Reitero mis gracias por el interés

un saludo

espartaco

Espartaco
17-11-2006, 09:12:09
soy yo otra vez, pongo el mensaje para que no se olvide.
Por favor, necesito ayuda con este tema, lo mas urgente posible.

Muchas gracias a todos por anticipado.:o

Lepe
17-11-2006, 10:55:03
¿Por qué usar un TImage si puedes usar un TDBImage?

Saludos

Ivanzinho
17-11-2006, 11:02:50
¿Por qué usar un TImage si puedes usar un TDBImage?


Como dice Lepe por qué no usuas un TDBImage, yo lo utilizo para archivos bmp, pero como estos no tienen algunas opciones que tiene el TImage, como por ejemplo saber el tamaño de la foto para centrarla en pantalla, lo que hago es ocultar este componente y agregar un TImage y en el evento correspondiente hago lo siguente Timage.Picture = TDBImage.Picture y después trabajo con el TImage, esto con los archivos bmp, para los jpg utilizo un Stream

Espartaco
21-11-2006, 11:48:17
Gracias a todos por vuestra ayuda, haré lo que dice ivanzinho, pero me viene mejor usar un TImage. Un poco frustrante no?:confused:

Pd: No he contestado antes porque el trabajo no me ha dado ni un respiro.
Gracias de nuevo, foros como este hacen que no te sientas solo cuando estás haciendo un programa.:D

k_rito
29-11-2006, 22:32:15
Probe lo que alguien propuso anteriormete y funca, es solo utilizar un TDBimage enlasado a la tabla de la que quieres extraer el picture en BMP, y luego lo muestras en tu Timage con esa instruccion:

logo.Picture:=logoDB.Picture; (Logo= de tipo Timage y LogoDB= de tipo TDBImage)