我有一个cairo_t cr
我可以用cairo画画。
我想尝试在这个cairo图形上创建一个突出显示效果,它应该做以下事情之一:
我怎么能用cairo做到这一点?
[编辑]我有一个显示图标的小部件,当我将鼠标移到小部件上时我想突出显示它。除了突出显示之外,我还希望绘制一些白色背景,以便更清楚地突出显示哪个图标。 [/编辑]
答案 0 :(得分:3)
我认为你应该查看一些cairo的运营商:
http://cairographics.org/operators/
使用SOFT_LIGHT或LIGHTEN以及明亮的光源颜色应该可以使整个图像变亮。我猜。我会做一些实验。
为什么要更改图像的透明部分?我猜大多数表面都没有任何透明部分。 无论如何,我认为带有白色源的DEST_OVER应该这样做。
Bluring是cairo无法为你做的事情。但是,您可以将图像绘制到图像表面,并使用浮动在互联网上的一些代码来模糊图像。例如,Google就这样引导我:http://taschenorakel.de/mathias/2008/11/24/blur-effect-cairo/
编辑:我做了一些实验(这是oocairo lua绑定,http://oocairo.naquadah.org/)。我认为您希望操作员CAIRO_OPERATOR_ATOP具有固定来源,例如: rgba(1,1,1,0.25)。这似乎确实减轻了形象。
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")