Asuntos Oficiales > Retos

 Formato Bmp

<< < (13/35) > >>

Enko:

--- Citar --- padWidth := FWidth mod 4;
    for j:=FHeight downto 1 do
    begin
      for i:=1 to FWidth do
      begin
        BlockRead(F, Pixel, sizeOf(Pixel), Transfer);
        if Transfer=0 then Break;
        Pixels[i,j] := Pixel;
      end;
      Seek(F, FilePos(F)+padWidth);
    end;

--- Fin de la cita ---
Basicamente los que hace es:
Leer completamente la Fila y luego se saltea en el archivo los Bytes agregados (pueden ser 1,2 o 3).
FilePos, es la posicion actual en el fichero, padWidth, son los bytes necesarios para que sea multiplo de 4 el ancho.

PD:
Leer pixel por pixel es lento. Se puede usar de seguro un MemCopy para leer toda la fila (por eso es multiplo de 4).

JuanK:

--- Cita de: "Enko" ---
--- Citar --- padWidth := FWidth mod 4;
    for j:=FHeight downto 1 do
    begin
      for i:=1 to FWidth do
      begin
        BlockRead(F, Pixel, sizeOf(Pixel), Transfer);
        if Transfer=0 then Break;
        Pixels[i,j] := Pixel;
      end;
      Seek(F, FilePos(F)+padWidth);
    end;

--- Fin de la cita ---
Basicamente los que hace es:
Leer completamente la Fila y luego se saltea en el archivo los Bytes agregados (pueden ser 1,2 o 3).
FilePos, es la posicion actual en el fichero, padWidth, son los bytes necesarios para que sea multiplo de 4 el ancho.

PD:
Leer pixel por pixel es lento. Se puede usar de seguro un MemCopy para leer toda la fila (por eso es multiplo de 4).
--- Fin de la cita ---
Asi es enko.

En efecto alguna vez lei que se dejode 24 bit porque es mucho mas rapido manejar los movimientos con un entero de 32 que con un short de 16 y un byte de 8.

La transferencia del bloque completo es la mejor y mas rapida, y fue la que use en mi caso aunque no hice paso por fila sino paso directo de todo ( en la parte del dibujo).

JuanK:
Saludos, he revisado y lo tengo como lo hacia Geo.

Algiuen me puede explicaar que hace esto?


--- Código: Text --- ancho = (ancho + 3) & ~3; */ alineado en 4 bytes*/bitsize = ancho * alto_imagen 
Es decir ya se que hace pero no se la lógica usada para lograrlo.


gracias.

Danielo:
Estoy en el módulo Dibujo y tengo algunas dudas con la información del cabezal del archivo bmp:

--- Código: Text ---typedef struct {   unsigned int size;               /* Header size in bytes      */   int width,height;                /* Width and height of image */   unsigned short int planes;       /* Number of colour planes   */   unsigned short int bits;         /* Bits per pixel            */   unsigned int compression;        /* Compression type          */   unsigned int imagesize;          /* Image size in bytes       */   int xresolution,yresolution;     /* Pixels per meter          */   unsigned int ncolours;           /* Number of colours         */   unsigned int importantcolours;   /* Important colours         */} INFOHEADER; No entiendo la diferencia entre ncolours e importantcolours. Hice un programita de prueba que despliega en pantalla todos los datos del bmp y me sale todo coherente (al menos para mi) hasta:

xresolution=0;
yresolution=0;
ncolours=0;
importantcolours=0;

 :blink: ¿eso está bien?... yo pensaba que ncolours almacenaba la cantidad de colores que tiene  el bmp, pero como me sale 0 parecería que es otra cosa.

... ¿y que son los importantcolours?... ¿colores importantes?... ¿está bien que sea 0?

Análoga duda con xresolution e yresolution  :(

JuanK:
ni te fijes:

xresolution=0;
yresolution=0;
ncolours=0;
importantcolours=0;


no se usan en bmp de 24 bits, o al menos no para un bmp24 standart.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa