
Cargar imágenes de tipo variant en un TImage
#21
Escrito 17 septiembre 2010 - 08:58
Saludos.
#22
Escrito 17 septiembre 2010 - 09:00
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
Escrito 17 septiembre 2010 - 09:05
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
Escrito 13 octubre 2010 - 10:13

Saludos.
#25
Escrito 08 julio 2012 - 07:04
Nota: Trabajo con firebird
Gracias
#26
Escrito 09 julio 2012 - 03:26
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
Escrito 09 julio 2012 - 07:22