diff options
author | Matvey Konovalov <m.konovalov@samsung.com> | 2014-04-15 19:22:33 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2014-04-15 19:22:58 +0900 |
commit | 9fb3aa6549a715b47d4fb64b599ad08b372e97c7 (patch) | |
tree | 739aa8fb59e6872fccc77ccc979dc5f07e001931 | |
parent | 70cdfc44aa09d66315ad4fb83523235644b77cdc (diff) | |
download | efl-9fb3aa6549a715b47d4fb64b599ad08b372e97c7.tar.gz |
evas - improve speed of unpremul with redundant pixel data
-rw-r--r-- | src/lib/evas/common/evas_convert_color.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/lib/evas/common/evas_convert_color.c b/src/lib/evas/common/evas_convert_color.c index 3399443e44..e8a6b7254a 100644 --- a/src/lib/evas/common/evas_convert_color.c +++ b/src/lib/evas/common/evas_convert_color.c @@ -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); - - if ((a > 0) && (a < 255)) - *data = ARGB_JOIN(a, - (R_VAL(data) * 255) / a, - (G_VAL(data) * 255) / a, - (B_VAL(data) * 255) / a); + DATA32 a = (*data >> 24) + 1; + + 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++; } |