src/video/SDL_alphamult.c
author Sam Lantinga <slouken@libsdl.org>
Sun, 02 Aug 2009 18:39:57 +0000
changeset 3227 458e53d8662c
parent 3055 cd863dd2082b
child 3697 f7b03b6838cb
permissions -rw-r--r--
Clarified API documentation
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2009 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 #include "SDL_config.h"
    23 
    24 #include "SDL_blit.h"
    25 #include "SDL_alphamult.h"
    26 
    27 /* Functions to pre-multiply the alpha channel into the color channels */
    28 
    29 #define DEFINE_PREMULTIPLY_FUNC(fmt) \
    30 void \
    31 SDL_PreMultiplyAlpha##fmt(int w, int h, Uint32 *pixels, int pitch) \
    32 { \
    33     pitch /= 4; \
    34     while (h--) { \
    35         int n; \
    36         Uint32 *row = pixels; \
    37         Uint32 pixel; \
    38         unsigned r, g, b, a; \
    39  \
    40         for (n = w; n--; ) { \
    41             pixel = *row; \
    42             RGBA_FROM_##fmt(pixel, r, g, b, a); \
    43             r = (r * a) / 255; \
    44             g = (g * a) / 255; \
    45             b = (b * a) / 255; \
    46             fmt##_FROM_RGBA(*row, r, g, b, a); \
    47             ++row; \
    48         } \
    49         pixels += pitch; \
    50     } \
    51 }
    52 
    53 /* *INDENT-OFF* */
    54 DEFINE_PREMULTIPLY_FUNC(ARGB8888)
    55 DEFINE_PREMULTIPLY_FUNC(RGBA8888)
    56 DEFINE_PREMULTIPLY_FUNC(ABGR8888)
    57 DEFINE_PREMULTIPLY_FUNC(BGRA8888)
    58 /* *INDENT-ON* */
    59 
    60 /* vi: set ts=4 sw=4 expandtab: */