Cargar imágenes de tipo variant en un TImage
#21
Posted 17 September 2010 - 08:58 PM
Saludos.
#22
Posted 17 September 2010 - 09:00 PM
Ah vaya, seguire buscando documentacion al respecto ya que es muy escaso el asunto, es posible que sea una imagen del tipo 1:N?.
Saludos.
Una pregunta, con que función, utileria, programa, etc ingresa a la base de datos el Template, he hecho pruebas de decodificar el supuesto base64 y despues meterlo como un Stream a una imagen y no muestra nada, aunque tampoco me da errores.
Salud OS
#23
Posted 17 September 2010 - 09:05 PM
Una pregunta, con que función, utileria, programa, etc ingresa a la base de datos el Template, he hecho pruebas de decodificar el supuesto base64 y despues meterlo como un Stream a una imagen y no muestra nada, aunque tampoco me da errores.
Salud OS
Pues la huella se descarga directamente desde el lector via un software proporcionado por el proveedor.
#24
Posted 13 October 2010 - 10:13 AM
Saludos.
#25
Posted 08 July 2012 - 07:04 PM
Nota: Trabajo con firebird
Gracias
#26
Posted 09 July 2012 - 03:26 AM
En su lugar, el software del lector instala un servidor OLE que es capaz de mostrar la imagen sobre un TOLeContainer de Delphi, no sobre un TImage.
Creo que en lugar de tener un TImage deberías poner un TOleContainer, luego, inicializar el OleContainer.OLEObjetc, y ese OLEObject creo que es el que sabrá hacer un LoadFromStream del texto este en Base64/Hex que mencionais, y supongo que sin necesidad de descomprimirselo en absoluto... pero todo esto son suposiciones, claro.
Te copio trozos de código que uso para visualizar TOLEContainers, es código antiguo, no lo uso hace años, pero te allanará el camino.
Así lo creo sobre un form blanco por código:
Ole:= TOleContainer.create(TmpForm); Ole.Color:= clWhite; Ole.Parent:= TmpForm; //El panel del form donde quieres poner la imagen Ole.SizeMode:= smStretch; Ole.AutoActivate:= aaManual; Ole.AllowInPlace:= false; Ole.Align:= alClient; Ole.AutoVerbMenu:= false; Ole.BorderStyle:= bsNone;
Con este código de tu post, se lee la huella dentro de un OLEVariant...
if not IsEmpty then with TBlobStream(CreateBlobStream(FieldByName('Template'), bmRead)) do begin AFPData := VarArrayCreate([0, Size + 1], varByte); pData := VarArrayLock(AFPData); try Read(pData^, Size); finally VarArrayUnlock(AFPData); end; Free; end;
Ahora te tocaría pasarselo (el AFPData que es un OLEVariant) al objeto OLE interno dentro del TOLECOntainer, no te se decir el como, haz pruebas (quizas si lo guardas a stream/fichero y luego haces un TOleContainer.LoadFromStream o algo así... ), y finalmente, si quieres obtener un BMP, tendrias que "hacerle una foto" al olecontainer!
Yo lo hago así:
if (Foto=Nil) then Foto:= TPicture.create; //Muestro el form... TmpForm.Visible:= true; TmpForm.Show; //Refresco el contenido del Ole... S:= TMemoryStream.create; Ole.SaveToStream(S); S.Position:= 0; Ole.LoadFromStream(S); S.free; Application.ProcessMessages; while (Ole.State <> osLoaded) do Application.ProcessMessages; //Cambio tamaño de la Foto... Foto.BitMap.Width:= Ole.Width; Foto.BitMap.Height:= Ole.Height; //Defino rectangulos a copiar (canvas)... R1.left:= 0; R1.top:= 0; R1.right:= Foto.Width; R1.bottom:= Foto.Height; R2.left:= Ole.left+1; R2.top:= Ole.top+1; R2.right:= Ole.left+Ole.Width-2; R2.bottom:= Ole.Top+Ole.Height-2; Foto.BitMap.Canvas.CopyRect(R1,TmpForm.Canvas,R2); TmpForm.Visible:= false; Ole.modified:= false;
Creo que todo va de controlar estos olecontainers, no imagenes, pero de nuevo, es solo mi impresion!
#27
Posted 09 July 2012 - 07:22 AM