From: Jim Dutcher (dutcher@volny.cz)
Date: Sat 11 Dec 1999 - 04:28:28 IST
> Hi!
> I´m writing to know how can I capture the screen when I´m using svgalib
> (i mean in a graphic mode), I think i can use gl_getbox() but I have to
> save it in a BMP file that can be open with another graphic program on
> linux or windows :(
> Thanks!
>
> cristian
>
>
well, this is the BMP format (file structure):
BITMAPFILEHEADER
BITMAPINFOHEADER
RGBQUAD[0]
RGBQUAD[1]
.
.
.
RGBQUAD[n]
The BITMAPINFOHEADER and RGBQUADs are together called
BITMAPINFO
Picture "bits"
Here are the structures:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // must be set to string "BM", identifies the file
type
DWORD bfSize; // size of the file, used by programs which
load the file at once
WORD bfReserved1; // reserved for future used, must be set to 0
WORD bfReserved2; // reserved for future used, must be set to 0
DWORD bfOffBits; // adress of the first "bit" of the picture
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; // size of the BITMAPINFOHEADER structure
LONG biWidth; // width of the picture
LONG biHeight; // height of the picture
WORD biPlanes; // number of planes, must be said to 1
WORD biBitCount; // number of bits used for one pixel, this may
be 1, 4, 8, 16, 24 or 32
DWORD biCompression; // type of the compression, set to 0, it
means no compression
DWORD biSizeImage; // size of the image (bits) this may be 0
for bitmaps without compression
LONG biXPelsPerMeter; // set to 0
LONG biYPelsPerMeter; // set to 0
DWORD biClrUsed; // colors used, 0 means all colors are
used
DWORD biClrImportant; // number of important colors, set 0
} BITMAPINFOHEADER;
typedef struct tagRGBQUAD
{
BYTE rgbBlue; // blue (0..255)
BYTE rgbGreen; // green (0..255)
BYTE rgbRed; // red (0..255)
BYTE rgbReserved; // reserved, must be 0
} RGBQUAD;
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
remember to use __attribute__((packed)) for every member of the structures
when using gcc
for example
rgbBlue __attribute__((packed))
RGBQUAD are used to define the palette, for true-color images there's
nothing
like this
see windows documentation to learn more
be careful about this
a picture like this in the file:
ooooooooooooooooooooooooooooo
o o
o o o
o o o o o
o o o o o
o o o
o o o
o o
ooooooooooooooooooooooooooooo
will be displayed like this:
ooooooooooooooooooooooooooooo
o o
o o o
o o o
o o o o o
o o o o o
o o o
o o
ooooooooooooooooooooooooooooo
that's it
bye
This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:22 IST