Ich denke, Sie sollen einige der Betreiber überprüfen, die kairo hat:
http://cairographics.org/operators/
das gesamte Bild Lightening sollte mit SOFT_LIGHT oder LIGHTEN und einer hellen Quelle Farbe machbar sein. Ich vermute. Ich werde ein paar Experimente dazu machen.
Warum genau möchten Sie die transparenten Teile des Bildes ändern? Ich würde vermuten, dass die meisten Oberflächen keine transparenten Teile haben. Wie auch immer, ich denke, dass das DEST_OVER mit einer weißen Quelle das tun sollte.
Bluring ist etwas, das cairo nicht für Sie tun kann. Sie können jedoch Ihr Bild auf eine Bildoberfläche zeichnen und einen Teil des Codes verwenden, der im Internet schwebt, um das Bild zu verwischen. Zum Beispiel, führen Sie mich nur auf diese Weise: http://taschenorakel.de/mathias/2008/11/24/blur-effect-cairo/
Edit: Ich habe einige Experimente (das ist die Ooca Lua Bindings, http://oocairo.naquadah.org/). Ich denke, dass Sie den Operator CAIRO_OPERATOR_ATOP mit einer soliden Quelle von z.B. rgba (1, 1, 1, 0,25). Dies scheint das Bild tatsächlich aufzuhellen.
oocairo = require("oocairo")
s = oocairo.image_surface_create("argb32", 600, 400)
img = oocairo.image_surface_create_from_png("/usr/share/icons/wesnoth-1.8-icon.png")
local w, h = img:get_width(), img:get_height()
cr = oocairo.context_create(s)
function before()
cr:save()
cr:rectangle(0, 0, w, h)
cr:clip()
cr:set_source(img)
cr:paint()
end
function after()
cr:restore()
cr:translate(w, 0)
end
function try_operator(op, alpha)
before()
cr:set_operator(op)
cr:set_source_rgba(1, 1, 1, alpha)
cr:paint()
after()
end
function try_alpha(alpha)
cr:save()
before()
after()
try_operator("atop", alpha)
try_operator("color-dodge", alpha)
try_operator("soft-light", alpha)
try_operator("hard-light", alpha)
try_operator("hsl-hue", alpha)
try_operator("hsl-saturation", alpha)
try_operator("hsl-color", alpha)
try_operator("hsl-luminosity", alpha)
cr:restore()
cr:translate(0, h)
end
try_alpha(1)
try_alpha(0.75)
try_alpha(0.5)
try_alpha(0.25)
try_alpha(0)
s:write_to_png("/tmp/t.png")
Danke. Ich hätte erwähnen sollen, dass ich in C programmiere. In welcher Sprache ist dein Beispiel? Ich versuche ein Symbol hervorzuheben, wenn ich es mit der Maus bewege. Die Icons sind meist rund und haben viele transparente Teile um sie herum, also möchte ich eine Art weißen (oder eine andere Farbe) Halo um sie herum zeichnen. Dies würde es sehr erkennbar machen, wenn die Maus über ein Symbol bewegt wird. – lanoxx
die Sprache ist lua, aber nur weil ich IMHO es leichter ist, darin zu experimentieren. Das meiste davon bildet 1: 1 auf die C-api ab, außer dass dies den Müllsammler von Lua verwendet. Ich weiß nicht über das Hinzufügen eines weißen Halos, aber cairo_set_operator (cr, CAIRO_OPERATOR_ATOP); cairo_set_source_rgba (cr, 1, 1, 1, 0,2); cairo_paint (cr); sollte Sachen aufhellen. Für einen weißen Hintergrund: cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER); cairo_set_source_rgb (cr, 1, 1, 1); cairo_paint (cr); (All dies kann durch cairo_clip auf eine Region beschränkt werden) –
Für die Unschärfe: Gefunden nur: http://cairographics.org/cookbook/blur.c –