FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Cargar imagen desde Firebird
Estoy usando este código que me facilitaron en otro foro:
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); } Código:
Imagen->Picture->Assign(::BLOBtoJPG(Query->FieldByName("Imagen"))); Código:
Imagen->Picture->Assign(::BLOBtoJPG(Query->FieldByName("Imagen")->Value)); Cita:
Cita:
|
#3
|
||||
|
||||
Haré la prueba.
|
#4
|
||||
|
||||
Cita:
Cita:
|
#5
|
||||
|
||||
Dicho de otra forma: ¿Qué habría que poner detrás del FieldByName? Igual que ponemos AsString, AsInteger o AsDateTime, ¿qué se pone en caso de campos BLOB? Porque AsBlob a mi me da error en BCB 6.
|
#6
|
||||
|
||||
Cita:
Código:
::BLOBtoJPG((TBlobField*)Query->FieldByName("Imagen")) Cita:
-
__________________
"constructive mind, destructive thoughts" |
#7
|
||||
|
||||
Hola.
Solo como observación, me parece ver un problema de memory leak en esa función... Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
||||
|
||||
Hola de nuevo.
De este modo me funciona bien: Código PHP:
Y si gustas usar streams, Código PHP:
Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#9
|
||||
|
||||
Cita:
Cita:
¿Dónde? A mi no me da ningún error de memoria. |
#10
|
||||
|
||||
Código:
TJPEGImage* __fastcall BlobToJpg(TBlobField *CampoBLOB) { if(!CampoBLOB->Value.IsEmpty()) { TJPEGImage *JPeg = new TJPEGImage; // <==== (1) TMemoryStream *StreamTmp = new TMemoryStream; // <==== (2) CampoBLOB->SaveToStream(StreamTmp); //sacamos el jpg y se convierte a stream StreamTmp->Seek(0,soFromBeginning); JPeg->LoadFromStream(StreamTmp); return(JPeg); } else return(NULL); } Cuando solicitas recursos usando VCL es tu responsabilidad liberarlos, Builder C++ no liberará automáticamente la memoria ocupada, aún cuando se trate de variables locales a la función. En ese código no se libera la variable SteramTmp; y lo mas serio es que no se puede liberar la variable JPeg sin dejar inoperante la función. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
||||
|
||||
Cita:
Verguenza para mí que no lo había pillado en el código inicial. -
__________________
"constructive mind, destructive thoughts" |
#12
|
||||
|
||||
¡Pues no me había dado cuenta! Tenéis razón. El problema es cómo liberar ambas variables ya que el jpeg es lo que devuelve como respuesta la función; no se me ocurre como. Acaso sea mejor sistema el que me sugieres en tu código, invocando en la función tanto el campo blob como el TImage en que ha de situarse; de esa forma se pueden liberar recursos. Voy a probarlo.
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cargar Imagen desde un Hosting | b3nshi | Internet | 2 | 05-02-2010 20:13:29 |
Cargar imagen desde directorio | domenor | Gráficos | 13 | 16-10-2007 17:54:30 |
Cargar Imagen desde un Form secundario | Bicholoco | Gráficos | 11 | 02-04-2007 18:11:51 |
Cargar una imagen desde la web a un TImage | asegura | Gráficos | 3 | 20-10-2006 03:13:10 |
Cargar una imagen desde sitio en internet?? | burasu | Internet | 10 | 01-09-2004 14:05:49 |
|