Ver Mensaje Individual
  #1  
Antiguo 23-07-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Reputación: 12
ElMug Va por buen camino
Leer JPEG o BitMap de campo blob

Aqui les dejo este desarrollo original de hace un par de dias, con el que se evita el tener una segunda columna para indicar el tipo de imagen guardada en una columna tipo Blob, y sin tener que descifrar el dato Blob escudriñandolo, para ver si es JPEG o Bitmap, y mostrar la imagen en un componente TImage.

Esto solo es para mostrar la imagen en dicho componente, pues de sobra se sabe que el guardado de la imagen en columna tipo Blob, es asunto trillado, y se hace usualmente mediante Image1.Picture.LoadFromFile(dlgOpenPicture.FileName). Pero realmente es irrelevante de como se archivo el dato Blob, siempre que no este fuera de lo convencional.

El asunto de este nuevo procedimiento es, pues, MOSTRAR la imagen en un componente TImage, irrespectivamente de si sea tipo .bmp o tipo JPEG.

Obvio les sera, que este procedimiento se puede facilmente ampliar si en la aplicacion se desea archivar otro tipo mas de imagen.

Sin embargo, el tipo JPEG y el Bitmap son los mas comunes. Si se desea archivar otro tipo de imagen, ya se sabe que hay varias utilerias para convertir imagenes a JPEG o a Bitmap, cuando aun son archivos. Hay utilerias que hacen la conversion al nivel Folder, inclusive.

Este es el codigo:

Código:
// var
//  BlobField: TField;
//  BS: TStream;

  with SQLQuery1 do
    begin
       BlobField := FieldByName('Pic'); {'Pic'  es el nombre de la column Blob con las fotos}
       BS := CreateBlobStream(BlobField,bmRead);
       Image1.Picture.Graphic:= TJpegImage.Create; {se asume sea JPEG}
    Try
       Image1.Picture.Graphic.LoadFromStream(BS); {error si no es JPEG}
      Except {repetir pasos para BitMap}
         BS.Free;
         Image1.Picture.Graphic:= nil; {vaciarla}
         BlobField := FieldByName('Pic'); {'Pic' es el nombre de la column Blob con las fotos}
         BS := CreateBlobStream(BlobField,bmRead);
         Image1.Picture.Graphic:= TBitMap.Create; {bitmap}
         Image1.Picture.Graphic.LoadFromStream(BS);
      end; {Try}
      BS.Free;
    end; {with SQLQuery}
Espero lo encuentren util y facil de entender.

Última edición por ElMug fecha: 23-07-2012 a las 12:55:07.
Responder Con Cita