On Tue, 2 Aug 2016 00:49:30 +0900 Jiwon Kim <jwkim0...@gmail.com> said:
technically that blur still is wrong. especially at the boundaries. you need to do for a simple 3x3 box blur which is what it's trying, to do pixel x -1, x, x +1 and same for y and handle the boundary cases AND write to the current pixel. you can do a marching box to be more efficient, but this could would be best off splitting into a simple 3x1 horizontal and then 1x3 vertical blur and blur to a new temporary buffer as destination for the horizon blur then copy back to primary image from tmp buffer for vertical. faster and more correct. but the purpose here is just to demo access to pixels not to get the algorithms fast or correct. though it's bad to have a not-fast and not-correct algorithm in docs. :) the page is a wiki and anyone can edit btw... :) just fyi. i'd fix it myself (toe doc) but ...have a lot of things to do and my priority list has this... not at the top :( > 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 > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel