PDA

Ver la Versión Completa : BMP en un array


lacatella
26-07-2006, 21:43:08
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
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:

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:


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;