26 lines
1.1 KiB
C++
26 lines
1.1 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "picture/pict.h"
|
|
|
|
using namespace GS;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
uchar Picture::AlphaCompositeAlpha(uchar a, uchar b)
|
|
{ return (uchar)Types::Clamp <int> (a + b - ((a * b) >> 8), 0, 255); }
|
|
uchar Picture::AlphaCompositeColor(uchar u, uchar v, uchar a, uchar b, uchar k)
|
|
{ return (uchar)Types::Clamp <int> (k ? (u * a + v * b - ((u * b * a) >> 8)) / k : 0, 0, 255); }
|
|
void Picture::AlphaCompositePixel(uchar *data, uchar r, uchar g, uchar b, uchar a)
|
|
{
|
|
uchar a_blend = AlphaCompositeAlpha(data[3], a);
|
|
data[0] = AlphaCompositeColor(data[0], r, data[3], a, a_blend);
|
|
data[1] = AlphaCompositeColor(data[1], g, data[3], a, a_blend);
|
|
data[2] = AlphaCompositeColor(data[2], b, data[3], a, a_blend);
|
|
data[3] = a_blend;
|
|
}
|
|
//------------------------------------------------------------------------------
|