2012-03-31 11 views
1

Ich habe eine cairo_t cr, auf die ich mit Kairo zurückgreifen kann. Ich möchte versuchen, eine Hervorhebung Wirkung auf diese kairo Grafik zu erstellen, das eines der Dinge tun sollten:Erstellen eines Highlight-Effekt mit der Cairo-Bibliothek

  • das ganze Bild aufhellen, so es der Hintergrund ein wenig heller
  • Veränderung sieht, das heißt die transparente Teile des Bildes zu einem gewissen hellen Farbe (zB weiß)
  • Vielleicht

Wie kann ich das mit kairo einer leichten Unschärfe auf dem Hintergrund hinzufügen?

[Bearbeiten] Ich habe ein Widget, das ein Symbol anzeigt, und ich möchte es hervorheben, wenn ich die Maus über das Widget bewegen. Zusätzlich zu dem Highlight möchte ich auch etwas weißen Hintergrund gezeichnet haben, damit deutlicher wird, welches Icon hervorgehoben ist. [/ Edit]

Antwort

3

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") 
+0

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

+0

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) –

+0

Für die Unschärfe: Gefunden nur: http://cairographics.org/cookbook/blur.c –