1 (31.03.2011 00:29:03 отредактировано SkaarjZR)

Есть изображение. Нужно сделать определённый цвет прозрачным. Но как?

Должно, вроде бы, легко решаться с помощью cairo, но я уже обгуглися и обчитался мануалов и не нашёл решения.

Вот кусочек кода, я уже пробовал маскирование, паттерны и пр.

    cairo_surface_t *surf;
    surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 32, 32);
    cairo_t *cr;
    cr = cairo_create(surf);
    gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
    cairo_rectangle(cr, 0, 0, 32, 32);
    cairo_clip(cr);
    cairo_paint(cr);

Получаем изображение на плоскости. Как сделать так, чтобы чёрный цвет в этом изображении исчез?

2 (31.03.2011 15:39:12 отредактировано SkaarjZR)

Написал такой некачественный код:

    unsigned char *t = cairo_image_surface_get_data(surf);
    gint i;
    for(i = 0; i < 32*32*4; i += 4){
        if((t[i] == 0xFF)&(t[i+1] == 0xFF)&(t[i+2] == 0xFF)&(t[i+3] == 0xFF)){
            t[i] = 0;
            t[i+1] = 0;
            t[i+2] = 0;
            t[i+3] = 0;
        }
    }

Работает! (делает белый непрозрачный чёрным прозрачным)
Может кто знает другие варианты?