diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index 5ce732c..181224b 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -85,6 +85,7 @@ unsigned int *rotate_left(Ewl_Widget *image); unsigned int *rotate_right(Ewl_Widget *image); unsigned int *blur_image(Ewl_Widget *image); unsigned int *sharpen_image(Ewl_Widget *image); +unsigned int *grayscale_image(Ewl_Widget *image); void update_image(Ewl_Widget *image, int w, int h, unsigned int *data); void save_dialog(const char *file); diff --git a/src/bin/ephoto_edit_view.c b/src/bin/ephoto_edit_view.c index da44931..5befd9b 100644 --- a/src/bin/ephoto_edit_view.c +++ b/src/bin/ephoto_edit_view.c @@ -14,6 +14,7 @@ static void rotate_image_left(Ewl_Widget *w, void *event, void *data); static void rotate_image_right(Ewl_Widget *w, void *event, void *data); static void image_blur(Ewl_Widget *w, void *event, void *data); static void image_sharpen(Ewl_Widget *w, void *event, void *data); +static void image_grayscale(Ewl_Widget *w, void *event, void *data); /*Add the edit view*/ Ewl_Widget *add_edit_view(Ewl_Widget *c) @@ -139,6 +140,11 @@ static void add_advanced_edit_tools(Ewl_Widget *c) ewl_object_alignment_set(EWL_OBJECT(button), EWL_FLAG_ALIGN_LEFT); ewl_object_fill_policy_set(EWL_OBJECT(button), EWL_FLAG_FILL_HFILL); + button = add_button(c, "Black and White", NULL, image_grayscale, NULL); + ewl_button_image_size_set(EWL_BUTTON(button), 30, 30); + ewl_object_alignment_set(EWL_OBJECT(button), EWL_FLAG_ALIGN_LEFT); + ewl_object_fill_policy_set(EWL_OBJECT(button), EWL_FLAG_FILL_HFILL); + return; } @@ -313,3 +319,16 @@ static void image_sharpen(Ewl_Widget *w, void *event, void *data) return; } +/*Convert image to Black and White*/ +static void image_grayscale(Ewl_Widget *w, void *event, void *data) +{ + unsigned int *image_data; + int nw, nh; + + evas_object_image_size_get(EWL_IMAGE(em->eimage)->image, &nw, &nh); + image_data = grayscale_image(em->eimage); + update_image(em->eimage, nw, nh, image_data); + ewl_widget_configure(em->eimage->parent); + + return; +} diff --git a/src/bin/ephoto_imaging.c b/src/bin/ephoto_imaging.c index 17a52c4..504cfe3 100644 --- a/src/bin/ephoto_imaging.c +++ b/src/bin/ephoto_imaging.c @@ -280,6 +280,30 @@ unsigned int *sharpen_image(Ewl_Widget *image) return im_data_new; } +unsigned int *grayscale_image(Ewl_Widget *image) +{ + unsigned int *im_data, *im_data_new; + int gray, i, r, g, b, a, ew, eh; + + im_data = evas_object_image_data_get(EWL_IMAGE(image)->image, FALSE); + evas_object_image_size_get(EWL_IMAGE(image)->image, &ew, &eh); + + im_data_new = malloc(sizeof(unsigned int) * ew * eh); + + for (i = 0; i < (ew * eh); i++) + { + b = (int)((im_data[i]) & 0xff); + g = (int)((im_data[i] >> 8) & 0xff); + r = (int)((im_data[i] >> 16) & 0xff); + a = (int)((im_data[i] >> 24) & 0xff); + + gray = (int)((0.3 * r) + (0.59 * g) + (0.11 * b)); + + im_data_new[i] = (gray << 24) | (gray << 16) | (gray << 8) | gray; + } + return im_data_new; +} + void update_image(Ewl_Widget *image, int w, int h, unsigned int *data) { if (w && h && !data)