Problemas al mostrar fotos en Delphi
1. Presentación de los principios de tipos y aplicaciones de la transmisión de datos
TStream se proporciona en Dephi para respaldar la operación de la transmisión de datos. TStream es la fuente de todas las transmisiones.
Pero como es una clase abstracta, no se puede usar directamente, sino que se deben usar sus subclases correspondientes,
como TFileStream, TStringStream, TMemoryStream, TBlobStream,
TWinSocketStream y TOleStream. TStream proporciona un método unificado y conciso para leer y escribir datos.
1.)SaveToStream(Stream: TStream); Función: Escribe los datos de la clase en la posición actual en la secuencia
2.)LoadFromStream(Stream: TStream); : Lee datos de la posición actual del Stream
En la práctica, básicamente solo usamos las dos funciones anteriores.
Problemas encontrados y soluciones correspondientes
Para ahorrar espacio de almacenamiento de imágenes y hacerlas más cómodas de usar, decidimos utilizar JPEG como formato de imagen.
(1) Problemas encontrados
En primer lugar, al dibujar los componentes utilizados por TImage en Delphi 5, el formato de imagen generado es el formato BMP.
En para ahorrar espacio de almacenamiento de imágenes, las imágenes en la base de datos deben almacenarse en formato JPEG, lo que crea la necesidad de convertir el formato de imagen; sin embargo, TImage en sí no es lo mismo que TImage, pero la imagen se almacena en el medio de la base de datos. Esto crea la necesidad de convertir el formato de imagen; TImage en sí no proporciona directamente la conversión entre estos dos formatos de imagen.
En segundo lugar, cómo sacar y mostrar la imagen almacenada en la base de datos de Microsoft Access: en Delphi 5
, el componente que puede proporcionar esta función es TDBImage, pero este componente tiene un Un gran defecto: sólo puede mostrar
tipos de imágenes que sólo pueden ser algunos iconos, metaarchivos y archivos BMP.
Sin embargo, según las necesidades reales, los datos de imagen almacenados en la base de datos de Microsoft Access se
guardan en formato JPEG.
(2) Soluciones correspondientes
Para resolver los dos problemas anteriores, puede utilizar un método llamado objeto binario grande (BLOB - Bina
ry Large Objeto) base de datos, que se utiliza para procesar datos en algunos formatos especiales. BLOB en realidad se almacena en forma de datos binarios
en la tabla de la base de datos. Los BLOB en las tablas de la base de datos en realidad se almacenan como datos binarios. Para trabajar con campos BLOB, puede tomar prestados algunos enfoques de bases de datos de escritorio visual. Aquí, elegimos implementarlo a través de flujos de memoria; el uso de flujos de memoria puede reducir las operaciones del disco, mejorando así en gran medida la eficiencia operativa.
El proceso específico y los códigos de programa relacionados son los siguientes:
1 Cómo implementar el almacenamiento de imágenes en una base de datos de Microsoft Access:
Aquí, TMemoryStream, a. Subclase de TStream, se utiliza para almacenar imágenes almacenadas en una base de datos de Microsoft Access.
MyJPEG: TJPEGImage;
MS: TMemoryStream;
comenzar
MyJPEG: = TJPEGImage.Create;
probar
con MyJPEG hacer
comenzar
Asignar(Remitente: TObject);
var
var
MyJPEG:= TJPEGImage.edit;
TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
Table1.Post
cuadro de mensaje; (getactivewindow(), '¡Imagen guardada!, 'Guardada', mb_ok);
Fin
Finalmente
MyJPEG.Free
end;
end;
end;
end;
En este código, la subclase TMemoryStream de TStream convierte el formato BMP. a formato JPEG usando flujo de memoria
Esta es la primera vez que se usa el flujo de memoria para convertir imágenes a formato JPEG
Puente intermedio.
2. Cómo obtener la imagen de la base de datos de Microsoft Access y mostrarla:
El siguiente código es el controlador de eventos que se activa cuando se presiona el botón "Ver imagen": p >
procedimiento TForm1.Button1Click(Remitente: TObject);
var tempstream: TStringStream;
tempjpeg: TJPEGImage;
comenzar
try
tempstream. := TStringStream.Create('');
TBlobField(Query1.FieldByName('Image')).Picture.Bitmap, logrando así el Los datos almacenados en formato JPEG
se convierten al formato BMP y se muestran en TDBImage. Finalmente, se liberan los dos objetos TStringStream y TJPEGImage
. Es importante tener en cuenta que la propiedad DataField de TDBImage no se puede establecer en la etapa de diseño, sino que solo se puede asignar a la propiedad TDBImage.Picture.Bitmap escribiendo código para asignar los datos de imagen del nuevo formato convertidos usando datos de flujo al p>
Propiedad TDBImage.Picture.Bitmap en la etapa de ejecución.
2003-10-7 11:10:00
Deja un comentario
2003-10-7 11:11:44 Convertir formato BMP a formato JPEG Cuando se utiliza Jpeg;
Procesar CopyBmpToJpeg(BmpFile, JpegFile.string)
TDBImage.Pict.Bitmap(BmpFile, JpegFile.string)string);
var
Bmp: TBitmap;
Jpeg: TJPEGImage
comenzar
Bmp: = TBitmap.create
Jpeg:=TJpegImage. Assign(YourBitmap); //Utiliza la misma profundidad de color
Ejecutar mediante B
Inicio
Ancho: =90; es 90x90
Alto: =90;
Fin
B.canvas.StretchDraw(B.canvas.Cliprect, YourBitmap);
B.SavetoFile(YourFileName); //Guardar
B.Free(B.canvas.Cliprect, YourBitmap); //Escalar para ajustar