¿Qué tipo de imagen es?
Tengo una aplicación en BCB 6 con una base de datos en Firebird y en una de las tablas hay guardadas imágenes en un campo BLOB. A la hora de leer esa tabla y mostrar el contenido, ya sea en el formulario o en un impreso, ¿cómo puedo saber que tipo de imagen estoy leyendo? Porque dependiendo de si es un BMP o un JPG el tratamiento es diferente.
A ver: Si la imagen original es un JPG con este código Código:
Imagen->Picture->Assign(Query->FieldByName("Imagen")); |
Hola.
Si vas a almacenar distintos tipos de imágenes en tu tabla, lo mas simple es agregar un campo (SMALLINT por ej.) que indique de que tipo de imágen se trata, revisa este hilo. Saludos :) |
Podrias leer las cabeceras y detectar el tipo de imagen. En este blog esta explicado e implementado: https://delphihaven.wordpress.com/20...aphic-formats/
|
Gracias por vuestras respuestas. Me han dado la solución en otro foro.
Código:
//Añadir cabeceras: #include <memory> #include <jpeg.hpp> |
Hola.
Si, pero vale aclarar que ese código sólo funciona para los tipos BMP y JPG, no funcionará si desearas usar imágenes de tipo PNG, ICO, GIF, etc. Para que soporte sólo esos dos tipos de imágen también se podría escribir así: Código PHP:
|
Cita:
Código PHP:
|
Hola _Leo.
Si, en Builder C++ 6 funciona sin problemas. Una prueba sobre una tabla con imágenes JPG y BMP mezcladas: Código PHP:
Saludos :) |
Cita:
Algo debo tener mal, porque lo he probado con ADO+Access, BDE+Paradox e IBX+Firebird, y si no es un BMP da el error que menciona Ángel. Son las mismas tablas donde he probado el resto de ejemplos sin problema. Si no es mucho pedir, si tienes tu ejemplo a mano, ¿podrías añadir estas líneas justo antes del LoadFromStream para ver cada tipo según se cargan en el título de la ventana? (BMP=4D42, JPG=D8FF, PNG=5089, GIF=4947, TIF=4949) Código PHP:
|
Hola _Leo
Cita:
Saludos :) |
Cita:
|
Cita:
En las versiones actuales el cambio que mas dificulta las cosas con respecto al BCB6 es el Unicode que al principio es lo que más despista, pero una vez lo entiendes bien no es un gran problema, aunque si cuesta un poco más cuando trabajas con un proyecto viejo que cuando empiezas uno nuevo directamente con Unicode. |
Cita:
|
En algún momento tuve la necesidad de almacenar distintos formatos de imagenes en una base de datos, y no quice guardar extensión ni tipo de archivo almacenado.
Y encontré un componente (TimDBImage, http://www.marteens.com/ejemplos.htm) que después de estudiar su funcionamiento adapte a mis necesidades y lo deje en el ftp del club. Esta es la dirección Componente CLDBImagen.zip Ejemplo: CLDBImagen_Sample.zip Hasta ahora lo sigo utilizando con muy buenos resultados. Es para Delphi, pero creo que te puede dar luces de como realizar lo que necesitas en C++Builder. Saludos cordiales |
Hola.
Primero que nada me disculpo con _Leo por las pruebas que tuvo que realizar por mi desacierto. Y para no dejar el caso inconcluso, este código muestra en un componente TImage los tipos de imagenes soportados y cuya firma sea evaluada y creada en consecuencia. Código PHP:
|
Cita:
|
Hola.
Cita:
Saludos. :) |
Muchas gracias.
|
Hola.
Cita:
Sin embargo encontré esta que parece prometer algo:tendrías que probarla ... Saludos :) |
Probareos. Gracfias ecfisa.
|
Aqui reviviendo temas resueltos y por si a alguien le es de ayuda.
Tratando un problema similar pero cargando mis imagenes en base 64, al final la cebecera puede o no ir en el binario por lo que no se puede identificar que tipo de archivo es hasta que se intenta representar (jpg, png, bmp), mi mejor opcion fue detectar la extension del archivo (esto no garantiza al 100% que sea el tipo de archivo indicado) y agregar la cabecera a mi cadena base64 (en el problema mencionado aqui seria añadir la extension/tipo de archivo en otro campo), en resumen no hay soluciones infalibles. Saludos. |
La franja horaria es GMT +2. Ahora son las 07:05:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi