繁体   English   中英

使用cairo库创建高亮效果

[英]Creating a highlight effect with the cairo library

我有一个cairo_t cr ,我可以用cairo画。 我想尝试在这个cairo图形上创建一个突出显示效果,它应该做以下事情之一:

  • 减轻整个图像,使其看起来更亮一点
  • 将背景,即图像的透明部分更改为更亮的颜色(例如白色)
  • 也许在背景上添加一点点模糊

我怎么能用cairo做到这一点?

[编辑]我有一个显示图标的小部件,当我将鼠标移到小部件上时我想突出显示它。 除了突出显示之外,我还希望绘制一些白色背景,以便更清楚地突出显示哪个图标。 [/编辑]

我想你应该看一下cairo的一些运营商:

http://cairographics.org/operators/

使用SOFT_LIGHT或LIGHTEN以及明亮的光源颜色应该可以使整个图像变亮。 我猜。 我会做一些实验。

为什么要更改图像的透明部分? 我猜大多数表面都没有任何透明部分。 无论如何,我认为带有白色源的DEST_OVER应该这样做。

模糊是开罗无法为你做的事情。 但是,您可以将图像绘制到图像表面,并使用浮动在互联网上的一些代码来模糊图像。 例如,谷歌只是这样引导我: 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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM