Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   BMP en un array (https://www.clubdelphi.com/foros/showthread.php?t=34093)

lacatella 26-07-2006 21:43:08

BMP en un array
 
Hola, espero que este mensaje este en la sección correcta, caso sontrario pido disculpas y agradecería que me indiquen a que sección corresponde y como cambiarlo.
Ahora si vamos al problema, necesito guardar en una base de datos (estoy usando firebird como gestor) una imagen bmp (tamaño:256x304, un byte por pixel, resolución:500dpi), la imagen está en memoria (la obtengo de un lector de huellas dactilares) en un array definido de la siguiente forma:

buffer:array[0..256*304] of byte;

la llamada para obtener la misma es la siguiente:

getfinder(0,@buffer[0]);


ahora bien, no soy muy ducho con los punteros y nunca trabaje con imágenes por lo que estoy bien complicado.
Me ayudaría si me pueden dar una idea de como almacenar la imagen en la base de datos o en su defecto como guardarla en un archivo bmp en disco(despues desde el mismo la almaceno en la base).
Desde ya les agradezco cualquier ayuda que puedan darme.

delphi.com.ar 27-07-2006 19:58:26

Cita:

Empezado por lacatella
Me ayudaría si me pueden dar una idea de como almacenar la imagen en la base de datos

Para guardar ese array en la base de datos, se me ocurre algo como:
Código Delphi [-]
var
  buffer: array[0..256*304] of byte;
  S: string;
begin
  SetLength(S, SizeOf(buffer));
  Move(buffer, S[1], SizeOf(buffer));
  {...
  Field.AsString := S;
  ...}

Saludos!

seoane 27-07-2006 20:36:27

Por si todavía te interesa convertir un buffer en un bitmap, aquí te dejo un ejemplo:

Código Delphi [-]
var
  Buffer: array[0..255,0..303] of Byte; // Cambie la forma de declarar el array
  Bitmap: TBitmap;
  i,j: Integer;
  P: PByteArray;
begin
  // Las 3 lineas siguientes son solo para llenar el buffer, en tu caso seria getfinder(0,@buffer);
  for i:= 0 to 255 do
    for j:= 0 to 303 do
      Buffer[i,j]:= i xor j;

  Bitmap:= TBitmap.Create;
  try
    Bitmap.PixelFormat:= pf8bit;
    Bitmap.Width:= 256;
    Bitmap.Height:= 304;
    for j:= 0 to Bitmap.Height - 1 do
    begin
      P:= Bitmap.ScanLine[j];
      for i:= 0 to Bitmap.Width - 1 do
        P[i]:= Buffer[i,j];
    end;
    // Aqui guardamos el Bitmap en disco, pero tambien podemos mostrarlo en un TImage o guardarlo en la base de datos.
    Bitmap.SaveToFile('c:\1.bmp');
  finally
    Bitmap.Free;
  end;
end;


La franja horaria es GMT +2. Ahora son las 22:00:26.

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