| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 19 Abr, 2007 4:12 pm Asunto: Cargar un TImage desde Firebird |
|
|
Tengo definida una tabla en Firebird con un campo para guardar un gráfico definido así:
| Código: | CARATULA BLOB SUB_TYPE 0 SEGMENT SIZE 240 |
Bien. La carga, hecha a partir de una tabla Paradox, está perfectamente realizada. Tengo una duda: ¿Cómo hago para asignar ahora el contenido de ese campo CARATULA a, por ejemplo, un TImage o un TQRImage? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 19 Abr, 2007 11:53 pm Asunto: |
|
|
Pudes usar la siguiente función, creo que la he puesto en Tips & Trucos, pero por si las dudas, no la encuentras, te la paso, el chiste es grabar la imagen almacenada en un BLOB y transferirla a un stream posteriormente usando la libreria TJPG la puedes assignar a un TImage
| Código: | TJPEGImage* __fastcall BLOBtoJPG(TBlobField *CampoBLOB)
{
if(!CampoBLOB->Value.IsEmpty())
{
TJPEGImage *JPeg = new TJPEGImage;
TMemoryStream *StreamTmp = new TMemoryStream;
CampoBLOB->SaveToStream(StreamTmp); //sacamos el jpg y se convierte a stream
StreamTmp->Seek(0,soFromBeginning);
JPeg->LoadFromStream(StreamTmp);
return(JPeg);
}
else
return(NULL);
} |
La manera de usarse seria de la siguiente forma:
| Código: | this->Image1->Picture->Assign(::BLOBtoJPG(::TuTablaCARATULA)) |
Saludos _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 20 Abr, 2007 7:40 am Asunto: |
|
|
Gracias por la respuesta César. Es verdad que estaba en la sección de trucos y no la vi; perdón por repetir la pregunta.
Me asalta una duda sobre como usar la función. La definición de la función no da ningún problema; otra cosa es usarla. No acabo de entender como llamar a la función:
| Código: | this->Image1->Picture->Assign(::BLOBtoJPG(::TuTablaCARATULA)) |
¿Cómo llevo yo a la función el contenido del campo? La tabla se llama Titulos. Si pongo:
| Código: | Image->Picture->Assign(::BLOBtoJPG(Titulos->FieldByName("CARATULA"))) |
me da este error al compilar: | Cita: | | E2034 Cannot convert 'TField *' to 'TBlobField *' |
Mientras que si pongo
| Código: | Image->Picture->Assign(::BLOBtoJPG(::Titulos->FieldByName("CARATULA"))) | el error es: | Cita: | | E2451 Undefined symbol 'Titulos' |
Y si pongo
| Código: | Image->Picture->Assign(::BLOBtoJPG(Titulos->FieldByName(Titulos->FieldDefs->Items[nItem]->Name)->Value); | entonces el error es | Cita: | | E2034 Cannot convert 'Variant' to 'TBlobField *' |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 20 Abr, 2007 9:57 am Asunto: |
|
|
| Código: | this->Image1->Picture->Assign(::BLOBtoJPG(TitulosCARATULA)); |
donde en la tabla titulos has presionado doble clic y has agregado los campos que pertenecen a la tabla _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 20 Abr, 2007 11:43 am Asunto: |
|
|
¡Chico! ¡Eres un monstruo! Pero ahora tengo otro problema Ha quedado así:
| Código: | Image->Picture->Assign(::BLOBtoJPG(TitulosCARATULA)); |
Ahora tengo otro probelma: Cuando en la función ejecuta la línea | Código: | JPeg->LoadFromStream(StreamTmp) | da un JPEG error #52. Lo he solucionado extrayendolo en forma de Bitmap. No sé si será la forma correcta o no, pero me funciona. La función ha quedado así:
| Código: | Graphics::TBitmap* __fastcall TfTitulos::BLOBtoJPG(TBlobField *CampoBLOB)
{
Graphics::TBitmap *Bitmap = new Graphics::TBitmap();
TMemoryStream *StreamTmp = new TMemoryStream;
CampoBLOB->SaveToStream(StreamTmp);
StreamTmp->Seek(0, soFromBeginning);
if (StreamTmp->Size > 1)
Bitmap->LoadFromStream(StreamTmp);
return(Bitmap);
}
//--------------------------------------------------------------------------- |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 21 Abr, 2007 4:29 am Asunto: |
|
|
No creo que tengas ningun inconveniente, al parecer debes agregar las cabeceras para el tratamiento de JPEG la cual es:
creo que hay problemas en cuanto a los codigos del foro, no se muestran correctamente la información dentro del foro.
debe ser el archivo de cabecera jpeg.cpp, pero no se muestra en la pantalla
#include <jpeg>
aun que la conversion la hice, para no jalar mucha memoria cuando la imagen al macenada (que tambien esta en formato JPEG) es demasiado grande, si se convierte en formato BMP esta ocupa mucho espacio y en el TImage tarda un poco mas en mostrarse.
en si las dos funciones para: tanto para almacenar en formato JPEG y recuperar las imagenes, estan en Tips & Trucos,
si te das cuenta en la parte de tips & trucos, al meter una imagen esta se convierte en formato JPEG, para que no ocupe mucho espacio en la base de datos.
saludos. _________________
 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|