Problemas al mostrar fotos en Delphi

Déjame compartir el código contigo, ahora hay muy pocos Acceso

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":

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

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