![]() |
String To TMemoryStream
Necesito pasar un String que contiene una imagen de una firma digitalizada a un TmemoryStream para poder cargarlo dentro de una imagen
El codigo que tengo es el siguiente y no funciona...
¿Que tengo mal?, ¿como es el modo correcto de hacerlo? |
Creo que depende de qué cosa sea el String Firma. Estás manejando sus caracteres como si fuera el contenido binario de una imagen BMP (que además estás guardando con extensión .jpg).
¿Podrías darnos más detalles de cómo se obtiene ese String y decirnos también qué versión de Delphi utilizas? Considera que el primer byte de valor 0 de la imagen binaria podría causar que el String quede truncado. Sería útil saber cómo se carga esa imagen en el String Firma. Un saludo. Al González. :) |
Uso Delphi 7, la firma digitaliza se encuentra en formato TIF INTEL LITTLE ENDIAN, empieza con 49492A
He comprobado a guardarla MANUALMENTE(copiando y pegando) en un Blob en la BBDD y funciona, copiando el string y pegandolo y me lo almacena bien y luego se puede mostrar, ademas se puede guardar como un jpg, el componente imagen que uso no es un TImagen, sino otro que permite mostrar tiff. Si lo guardo el string en la BBDD desde Delphi, no lo guarda exactamente igual que la cadena, si no que cambia totalmente. El contenido guardado no es el string original Como no he conseguido guadarlo en la BBDD para usarla de contenedor temporal, queria pasar el string a un TStream y cargarlo en la imagen, para posteriormente almacenarlo como .jpg en el disco duro y almacenar solo la ruta del fichero. El caso es que no carga la imagen y al salvar el contenido en un jpg se crea un fichero de 1kb con un puntito negro unicamente |
Prueba esto y nos cuentas
Yo tengo imagenes en un xml y de cadena las paso a TImagen y este codigo me funciona perfectamente. |
Gracias por el intento pero me sigue pasando lo mismo...
Me he dado cuenta que la imagen que carga en un unico puntito negro pongo el codigo completo, para que lo veais
sin embargo esto de aqui abajo si funciona, en la tabla pvTable1 he copiado y pegado manualmente el string s del procedure de arriba en el campo IMAGEN
Gracias, y a ver si me ayudais a dar con el problema |
La cadena que has puesto me es estraña, me explico,
Cuando tratas con una cadena de un archivo (ya sea imagen, exe ...) t sueles encontrar valores (caracteres) muy diferentes, entre ellos caracteres no imprimibles (caracteres del #0...#32), por lo cual no sabria decirte si la cadena que le estas poniendo es correcta o no. Pueden ser 2 opciones: - La cadena es correcta: Puede ser que le haga falta alguna transformación (parece una cadena Hexadecimal, mas que una cadena de un fichero). - La cadena es incorrecta: Puede ser que este desechando caracteres no imprimibles que son necesarios para la creación del Stream de la Imagen. También si el 2º código te funciona puedes abrir el archivo 'temp.jpg' con algun editor avanzado (ultraedit) y ver el valor de cada byte (caracter) y verificar que la cadena sea la correcta, también lo puedes ver si t curras un pequeño programa desde delphi. Espero tus noticias |
Correcto la cadena es una cadena hexadecimal y en la forma en la que se presenta es correcta, pues la recibo en un string a traves de un socket.
La imagen la devuelve un terminal hardware tactil que permite firmar sobre él. Voy a buscar el ultraEdit a ver si saco algo en claro... Gracias |
Entonces si es hexadecimal sera una cosa asi
Un Saludo, |
EXITO, MUCHAS GRACIAS!! Red_Leon
Cambiando el bucle por este ultimo he conseguido que funcione! Creo que optare por cagar la imagen en el componente y guardarla en un .jpg, para solo almacenar en la BBDD la ruta de la misma. Tema solucionado, gracias a todos por vuestro interes |
La franja horaria es GMT +2. Ahora son las 08:55:54. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi