forked from enlightenment/efl
evas - improve speed of unpremul with redundant pixel data
This commit is contained in:
parent
70cdfc44aa
commit
9fb3aa6549
|
@ -47,17 +47,26 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
|
||||||
EAPI void
|
EAPI void
|
||||||
evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
|
evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
|
||||||
{
|
{
|
||||||
DATA32 *de = data + len;
|
DATA32 *de = data + len;
|
||||||
|
DATA32 p_val = 0x00000000, p_res = 0x00000000;
|
||||||
|
|
||||||
while (data < de)
|
while (data < de)
|
||||||
{
|
{
|
||||||
DATA32 a = (*data >> 24);
|
DATA32 a = (*data >> 24) + 1;
|
||||||
|
|
||||||
if ((a > 0) && (a < 255))
|
if (p_val == *data) *data = p_res;
|
||||||
*data = ARGB_JOIN(a,
|
else
|
||||||
(R_VAL(data) * 255) / a,
|
{
|
||||||
(G_VAL(data) * 255) / a,
|
p_val = *data;
|
||||||
(B_VAL(data) * 255) / a);
|
if ((a > 1) && (a < 256))
|
||||||
|
*data = ARGB_JOIN(a,
|
||||||
|
(R_VAL(data) * 255) / a,
|
||||||
|
(G_VAL(data) * 255) / a,
|
||||||
|
(B_VAL(data) * 255) / a);
|
||||||
|
else if (a == 1)
|
||||||
|
*data = 0x00000000;
|
||||||
|
p_res = *data;
|
||||||
|
}
|
||||||
data++;
|
data++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue