Hi All.
I found some doubtful example code on EFL Programming guide.
(https://www.enlightenment.org/program_guide/evas/image_objects)
We can notify that result(blur) image is too much spread only horizontally,
when if set higher value to "blur_size".
Because, calculation about average color is used recursively.
(calc result is re-used for calc in 6th and 7th for loop)
So, I fixed the example code.
If I fixed by incorrect way, please fix again.
Regards.
Jiwon Kim.
========================================================
void image_blur(Evas_Object *img)
{
unsigned char *img_src = evas_object_image_data_get(img, EINA_TRUE);
int w, h;
evas_object_image_size_get(img, &w, &h);
int blur_size = 4;
int x, y, xx, yy;
for (y = 0; y < h; y++)
{
for (x = 0; x < w; x++)
{
int avg_color[3] = {0, 0, 0};
int blur_pixel_cnt = 0;
for (xx = x; (xx < x + blur_size) && (xx < w); xx++)
{
for (yy = y; (yy < y + blur_size) && (yy < h); yy++)
{
int idx = (yy * w * 4) + (xx * 4);
avg_color[0] += img_src[idx + 0];
avg_color[1] += img_src[idx + 1];
avg_color[2] += img_src[idx + 2];
++blur_pixel_cnt;
}
}
avg_color[0] /= blur_pixel_cnt;
avg_color[1] /= blur_pixel_cnt;
avg_color[2] /= blur_pixel_cnt;
* // Fixed newly*
int idx = (y * w * 4) + (x * 4);
img_src[idx + 0] = avg_color[0];
img_src[idx + 1] = avg_color[1];
img_src[idx + 2] = avg_color[2];
* // Removed*
* for (xx = x; (xx < x + blur_size) && (xx < w); xx++)*
* {*
* for (yy = y; (yy < y + blur_size) && (yy < h); yy++)*
* {*
* int idx = (yy * w * 4) + (xx * 4);*
* img_src[idx + 0] = avg_color[0];*
* img_src[idx + 1] = avg_color[1];*
* img_src[idx + 2] = avg_color[2];*
* }*
* }*
}
}
evas_object_image_data_update_add(img, 0, 0, w, h);
}
========================================================
------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel