Ejemplo n.º 1
0
Ret invert(Iterator* forward, Iterator* backward)
{
    void* data1 = NULL;
    void* data2 = NULL;
    return_val_if_fail(forward != NULL && backward != NULL, RET_INVALID_PARAMS);

    for (; iterator_offset(forward) < iterator_offset(backward);
         iterator_next(forward), iterator_prev(backward)) {
        iterator_get(forward, &data1);
        iterator_get(backward, &data2);
        iterator_set(forward, data2);
        iterator_set(backward, data1);
    }

    return RET_OK;
}
Ejemplo n.º 2
0
void imlib_binary(image_t *img, list_t *thresholds, bool invert, bool zero)
{
    for (list_lnk_t *it = iterator_start_from_head(thresholds); it; it = iterator_next(it)) {
        color_thresholds_list_lnk_data_t lnk_data;
        iterator_get(thresholds, it, &lnk_data);

        switch(img->bpp) {
            case IMAGE_BPP_BINARY: {
                break;
            }
            case IMAGE_BPP_GRAYSCALE: {
                if (!zero) {
                    for (uint8_t *start = IMAGE_COMPUTE_GRAYSCALE_PIXEL_ROW_PTR(img, 0),
                         *end = IMAGE_COMPUTE_GRAYSCALE_PIXEL_ROW_PTR(img, img->h);
                         start < end; start++) {
                        *start = COLOR_THRESHOLD_GRAYSCALE(*start, &lnk_data, invert)
                            ? COLOR_GRAYSCALE_BINARY_MAX : COLOR_GRAYSCALE_BINARY_MIN;
                    }
                } else {
                    for (uint8_t *start = IMAGE_COMPUTE_GRAYSCALE_PIXEL_ROW_PTR(img, 0),
                         *end = IMAGE_COMPUTE_GRAYSCALE_PIXEL_ROW_PTR(img, img->h);
                         start < end; start++) {
                        if (COLOR_THRESHOLD_GRAYSCALE(*start, &lnk_data, invert)) *start =
                            COLOR_GRAYSCALE_BINARY_MIN;
                    }
                }
                break;
            }
            case IMAGE_BPP_RGB565: {
                if (!zero) {
                    for (uint16_t *start = IMAGE_COMPUTE_RGB565_PIXEL_ROW_PTR(img, 0),
                         *end = IMAGE_COMPUTE_RGB565_PIXEL_ROW_PTR(img, img->h);
                         start < end; start++) {
                        *start = COLOR_THRESHOLD_RGB565(*start, &lnk_data, invert)
                            ? COLOR_RGB565_BINARY_MAX : COLOR_RGB565_BINARY_MIN;
                    }
                } else {
                    for (uint16_t *start = IMAGE_COMPUTE_RGB565_PIXEL_ROW_PTR(img, 0),
                         *end = IMAGE_COMPUTE_RGB565_PIXEL_ROW_PTR(img, img->h);
                         start < end; start++) {
                        if (COLOR_THRESHOLD_RGB565(*start, &lnk_data, invert)) *start =
                            COLOR_RGB565_BINARY_MIN;
                    }
                }
                break;
            }
            default: {
                break;
            }
        }
    }
}