home *** CD-ROM | disk | FTP | other *** search
- <!-- manual page source format generated by PolyglotMan v3.0.8+X.Org, -->
- <!-- available at http://polyglotman.sourceforge.net/ -->
-
- <html>
- <head>
- <title>"SDL_PixelFormat"("3") manual page</title>
- </head>
- <body bgcolor='#efefef' text='black' link='blue' vlink='#551A8B' alink='red'>
- <a href='#toc'>Table of Contents</a><p>
-
- <h2><a name='sect0' href='#toc0'>Name</a></h2>
- SDL_PixelFormat- Stores surface format information
- <h2><a name='sect1' href='#toc1'>Structure Definition</a></h2>
- <p>
- <br>
- <pre>CWtypedef struct SDL_PixelFormat {
- SDL_Palette *palette;
- Uint8 BitsPerPixel;
- Uint8 BytesPerPixel;
- Uint8 Rloss, Gloss, Bloss, Aloss;
- Uint8 Rshift, Gshift, Bshift, Ashift;
- Uint32 Rmask, Gmask, Bmask, Amask;
- Uint32 colorkey;
- Uint8 alpha;
- } SDL_PixelFormat;
- </pre><p>
-
- <h2><a name='sect2' href='#toc2'>Structure Data</a></h2>
-
- <dl>
-
- <dt><b>palette</b> </dt>
- <dd>Pointer to the <i>palette</i>, or <b>NULL</b> if the <b>BitsPerPixel</b>>8
- </dd>
-
- <dt><b>BitsPerPixel</b> </dt>
- <dd>The number of bits used to represent each pixel in a surface.
- Usually 8, 16, 24 or 32. </dd>
-
- <dt><b>BytesPerPixel</b> </dt>
- <dd>The number of bytes used to represent
- each pixel in a surface. Usually one to four. </dd>
-
- <dt><b>[RGBA]mask</b> </dt>
- <dd>Binary mask used
- to retrieve individual color values </dd>
-
- <dt><b>[RGBA]loss</b> </dt>
- <dd>Precision loss of each color
- component (2^[RGBA]loss) </dd>
-
- <dt><b>[RGBA]shift</b> </dt>
- <dd>Binary left shift of each color component
- in the pixel value </dd>
-
- <dt><b>colorkey</b> </dt>
- <dd>Pixel value of transparent pixels </dd>
-
- <dt><b>alpha</b> </dt>
- <dd>Overall
- surface alpha value </dd>
- </dl>
-
- <h2><a name='sect3' href='#toc3'>Description</a></h2>
- <p>
- A <b>SDL_PixelFormat</b> describes the format of
- the pixel data stored at the <b>pixels</b> field of a <i><b>SDL_Surface</b></i>. Every surface
- stores a <b>SDL_PixelFormat</b> in the <b>format</b> field. <p>
- If you wish to do pixel level
- modifications on a surface, then understanding how SDL stores its color
- information is essential. <p>
- 8-bit pixel formats are the easiest to understand.
- Since its an 8-bit format, we have 8 <b>BitsPerPixel</b> and 1 <b>BytesPerPixel</b>. Since
- <b>BytesPerPixel</b> is 1, all pixels are represented by a Uint8 which contains
- an index into <b>palette</b>-><b>colors</b>. So, to determine the color of a pixel in a
- 8-bit surface: we read the color index from <b>surface</b>-><b>pixels</b> and we use that
- index to read the <i><b>SDL_Color</b></i> structure from <b>surface</b>-><b>format</b>-><b>palette</b>-><b>colors</b>. Like
- so: <p>
- <br>
- <pre>CWSDL_Surface *surface;
- SDL_PixelFormat *fmt;
- SDL_Color *color;
- Uint8 index;
- .
- .
- /* Create surface */
- .
- .
- fmt=surface->format;
- /* Check the bitdepth of the surface */
- if(fmt->BitsPerPixel!=8){
- fprintf(stderr, "Not an 8-bit surface.
- ");
- return(-1);
- }
- /* Lock the surface */
- SDL_LockSurface(surface);
- /* Get the topleft pixel */
- index=*(Uint8 *)surface->pixels;
- color=fmt->palette->colors[index];
- /* Unlock the surface */
- SDL_UnlockSurface(surface);
- printf("Pixel Color-> Red: %d, Green: %d, Blue: %d. Index: %d
- ",
- color->r, color->g, color->b, index);
- .
- .
- </pre><p>
- <p>
- Pixel formats above 8-bit are an entirely different experience. They are
- considered to be "TrueColor" formats and the color information is stored
- in the pixels themselves, not in a palette. The mask, shift and loss fields
- tell us how the color information is encoded. The mask fields allow us to
- isolate each color component, the shift fields tell us the number of bits
- to the right of each component in the pixel value and the loss fields tell
- us the number of bits lost from each component when packing 8-bit color
- component in a pixel. <p>
- <br>
- <pre>CW/* Extracting color components from a 32-bit color value */
- SDL_PixelFormat *fmt;
- SDL_Surface *surface;
- Uint32 temp, pixel;
- Uint8 red, green, blue, alpha;
- .
- .
- .
- fmt=surface->format;
- SDL_LockSurface(surface);
- pixel=*((Uint32*)surface->pixels);
- SDL_UnlockSurface(surface);
- /* Get Red component */
- temp=pixel&fmt->Rmask; /* Isolate red component */
- temp=temp>>fmt->Rshift;/* Shift it down to 8-bit */
- temp=temp<<fmt->Rloss; /* Expand to a full 8-bit number */
- red=(Uint8)temp;
- /* Get Green component */
- temp=pixel&fmt->Gmask; /* Isolate green component */
- temp=temp>>fmt->Gshift;/* Shift it down to 8-bit */
- temp=temp<<fmt->Gloss; /* Expand to a full 8-bit number */
- green=(Uint8)temp;
- /* Get Blue component */
- temp=pixel&fmt->Bmask; /* Isolate blue component */
- temp=temp>>fmt->Bshift;/* Shift it down to 8-bit */
- temp=temp<<fmt->Bloss; /* Expand to a full 8-bit number */
- blue=(Uint8)temp;
- /* Get Alpha component */
- temp=pixel&fmt->Amask; /* Isolate alpha component */
- temp=temp>>fmt->Ashift;/* Shift it down to 8-bit */
- temp=temp<<fmt->Aloss; /* Expand to a full 8-bit number */
- alpha=(Uint8)temp;
- printf("Pixel Color -> R: %d, G: %d, B: %d, A: %d
- ", red, green, blue, alpha);
- .
- .
- .
- </pre><p>
-
- <h2><a name='sect4' href='#toc4'>See Also</a></h2>
- <p>
- <i><b>SDL_Surface</b></i>, <i><b>SDL_MapRGB</b></i>
- <!--
-
- <p>
-
- <hr><p>
- <a name='toc'><b>Table of Contents</b></a><p>
- <ul>
- <li><a name='toc0' href='#sect0'>Name</a></li>
- <li><a name='toc1' href='#sect1'>Structure Definition</a></li>
- <li><a name='toc2' href='#sect2'>Structure Data</a></li>
- <li><a name='toc3' href='#sect3'>Description</a></li>
- <li><a name='toc4' href='#sect4'>See Also</a></li>
- </ul>
- </body>
- </html>
-