forked from KolibriOS/kolibrios
autobuild sdlquake
git-svn-id: svn://kolibrios.org@5131 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
520
contrib/sdk/sources/SDL-1.2.2/docs/html/sdlpixelformat.html
Normal file
520
contrib/sdk/sources/SDL-1.2.2/docs/html/sdlpixelformat.html
Normal file
@@ -0,0 +1,520 @@
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>SDL_PixelFormat</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.64
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="SDL Library Documentation"
|
||||
HREF="index.html"><LINK
|
||||
REL="UP"
|
||||
TITLE="Video"
|
||||
HREF="video.html"><LINK
|
||||
REL="PREVIOUS"
|
||||
TITLE="SDL_Palette"
|
||||
HREF="sdlpalette.html"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="SDL_Surface"
|
||||
HREF="sdlsurface.html"></HEAD
|
||||
><BODY
|
||||
CLASS="REFENTRY"
|
||||
BGCOLOR="#FFF8DC"
|
||||
TEXT="#000000"
|
||||
LINK="#0000ee"
|
||||
VLINK="#551a8b"
|
||||
ALINK="#ff0000"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>SDL Library Documentation</TH
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="left"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="sdlpalette.html"
|
||||
>Prev</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="80%"
|
||||
ALIGN="center"
|
||||
VALIGN="bottom"
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="right"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="sdlsurface.html"
|
||||
>Next</A
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><H1
|
||||
><A
|
||||
NAME="SDLPIXELFORMAT"
|
||||
>SDL_PixelFormat</A
|
||||
></H1
|
||||
><DIV
|
||||
CLASS="REFNAMEDIV"
|
||||
><A
|
||||
NAME="AEN2756"
|
||||
></A
|
||||
><H2
|
||||
>Name</H2
|
||||
>SDL_PixelFormat -- Stores surface format information</DIV
|
||||
><DIV
|
||||
CLASS="REFSECT1"
|
||||
><A
|
||||
NAME="AEN2759"
|
||||
></A
|
||||
><H2
|
||||
>Structure Definition</H2
|
||||
><PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
>typedef struct{
|
||||
SDL_Palette *palette;
|
||||
Uint8 BitsPerPixel;
|
||||
Uint8 BytesPerPixel;
|
||||
Uint32 Rmask, Gmask, Bmask, Amask;
|
||||
Uint8 Rshift, Gshift, Bshift, Ashift;
|
||||
Uint8 Rloss, Gloss, Bloss, Aloss;
|
||||
Uint32 colorkey;
|
||||
Uint8 alpha;
|
||||
} SDL_PixelFormat;</PRE
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="REFSECT1"
|
||||
><A
|
||||
NAME="AEN2762"
|
||||
></A
|
||||
><H2
|
||||
>Structure Data</H2
|
||||
><DIV
|
||||
CLASS="INFORMALTABLE"
|
||||
><A
|
||||
NAME="AEN2764"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
><TABLE
|
||||
BORDER="0"
|
||||
CLASS="CALSTABLE"
|
||||
><TBODY
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>palette</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>Pointer to the <A
|
||||
HREF="sdlpalette.html"
|
||||
>palette</A
|
||||
>, or <TT
|
||||
CLASS="LITERAL"
|
||||
>NULL</TT
|
||||
> if the <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>BitsPerPixel</I
|
||||
></TT
|
||||
>>8</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>BitsPerPixel</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>The number of bits used to represent each pixel in a surface. Usually 8, 16, 24 or 32.</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>BytesPerPixel</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>The number of bytes used to represent each pixel in a surface. Usually one to four.</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>[RGBA]mask</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>Binary mask used to retrieve individual color values</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>[RGBA]loss</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>Precision loss of each color component (2<SUP
|
||||
>[RGBA]loss</SUP
|
||||
>)</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>[RGBA]shift</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>Binary left shift of each color component in the pixel value</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>colorkey</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>Pixel value of transparent pixels</TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>alpha</I
|
||||
></TT
|
||||
></TD
|
||||
><TD
|
||||
ALIGN="LEFT"
|
||||
VALIGN="TOP"
|
||||
>Overall surface alpha value</TD
|
||||
></TR
|
||||
></TBODY
|
||||
></TABLE
|
||||
><P
|
||||
></P
|
||||
></DIV
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="REFSECT1"
|
||||
><A
|
||||
NAME="AEN2803"
|
||||
></A
|
||||
><H2
|
||||
>Description</H2
|
||||
><P
|
||||
>A <SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>SDL_PixelFormat</SPAN
|
||||
> describes the format of the pixel data stored at the <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>pixels</I
|
||||
></TT
|
||||
> field of a <A
|
||||
HREF="sdlsurface.html"
|
||||
><SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>SDL_Surface</SPAN
|
||||
></A
|
||||
>. Every surface stores a <SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>SDL_PixelFormat</SPAN
|
||||
> in the <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>format</I
|
||||
></TT
|
||||
> field.</P
|
||||
><P
|
||||
>If you wish to do pixel level modifications on a surface, then understanding how SDL stores its color information is essential.</P
|
||||
><P
|
||||
>8-bit pixel formats are the easiest to understand. Since its an 8-bit format, we have 8 <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>BitsPerPixel</I
|
||||
></TT
|
||||
> and 1 <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>BytesPerPixel</I
|
||||
></TT
|
||||
>. Since <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>BytesPerPixel</I
|
||||
></TT
|
||||
> is 1, all pixels are represented by a Uint8 which contains an index into <TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>palette</I
|
||||
></TT
|
||||
>-><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>colors</I
|
||||
></TT
|
||||
>. So, to determine the color of a pixel in a 8-bit surface: we read the color index from <SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>surface</SPAN
|
||||
>-><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>pixels</I
|
||||
></TT
|
||||
> and we use that index to read the <A
|
||||
HREF="sdlcolor.html"
|
||||
><SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>SDL_Color</SPAN
|
||||
></A
|
||||
> structure from <SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>surface</SPAN
|
||||
>-><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>format</I
|
||||
></TT
|
||||
>-><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>palette</I
|
||||
></TT
|
||||
>-><TT
|
||||
CLASS="STRUCTFIELD"
|
||||
><I
|
||||
>colors</I
|
||||
></TT
|
||||
>. Like so:
|
||||
<PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
>SDL_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.\n");
|
||||
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\n",
|
||||
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.
|
||||
<PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
>/* 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\n", red, green, blue, alpha);
|
||||
.
|
||||
.
|
||||
.</PRE
|
||||
></P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="REFSECT1"
|
||||
><A
|
||||
NAME="AEN2830"
|
||||
></A
|
||||
><H2
|
||||
>See Also</H2
|
||||
><P
|
||||
><A
|
||||
HREF="sdlsurface.html"
|
||||
><SPAN
|
||||
CLASS="STRUCTNAME"
|
||||
>SDL_Surface</SPAN
|
||||
></A
|
||||
>,
|
||||
<A
|
||||
HREF="sdlmaprgb.html"
|
||||
><TT
|
||||
CLASS="FUNCTION"
|
||||
>SDL_MapRGB</TT
|
||||
></A
|
||||
></P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="sdlpalette.html"
|
||||
>Prev</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="index.html"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="sdlsurface.html"
|
||||
>Next</A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
>SDL_Palette</TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="video.html"
|
||||
>Up</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>SDL_Surface</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
Reference in New Issue
Block a user