evas - improve speed of unpremul with redundant pixel data

This commit is contained in:
Matvey Konovalov 2014-04-15 19:22:33 +09:00 committed by Carsten Haitzler (Rasterman)
parent 70cdfc44aa
commit 9fb3aa6549
1 changed files with 16 additions and 7 deletions

View File

@ -47,17 +47,26 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
EAPI void
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)
{
DATA32 a = (*data >> 24);
DATA32 a = (*data >> 24) + 1;
if ((a > 0) && (a < 255))
*data = ARGB_JOIN(a,
(R_VAL(data) * 255) / a,
(G_VAL(data) * 255) / a,
(B_VAL(data) * 255) / a);
if (p_val == *data) *data = p_res;
else
{
p_val = *data;
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++;
}