Содержимое актера беспорядка не смешивается должным образом

Поскольку ClutterTexture теперь помечен как устаревший, я последовал рекомендации и заменил его на ClutterActor, содержимое которого установлено на pixbuf.

from gi.repository import Clutter, GdkPixbuf, Cogl

Clutter.init([])
stage = Clutter.Stage()
stage.set_size(600, 300)

# old style
texture_actor = Clutter.Texture(filename='icon_big_a.png')
texture_actor.set_opacity(127)
stage.add_child(texture_actor)

# replacement because ClutterTexture is deprecated
pixbuf = GdkPixbuf.Pixbuf.new_from_file('icon_big_b.png')
pixel_format = Cogl.PixelFormat.RGBA_8888 if pixbuf.get_has_alpha() \
    else Cogl.PixelFormat.RGB_888

image = Clutter.Image()
image.set_data(
    pixbuf.get_pixels(),
    pixel_format,
    pixbuf.get_width(),
    pixbuf.get_height(),
    pixbuf.get_rowstride(),
)

image_actor = Clutter.Actor()
image_actor.set_content_scaling_filters(
    Clutter.ScalingFilter.TRILINEAR,
    Clutter.ScalingFilter.LINEAR
)
image_actor.set_content(image)
image_actor.set_size(pixbuf.get_width(), pixbuf.get_height())
image_actor.set_opacity(127)
image_actor.move_by(300, 0)
stage.add_child(image_actor)

stage.show()
Clutter.main()

Все работает, но когда я меняю непрозрачность актеров на 127, фон затемняется даже там, где он белый.

Вот репозиторий git с кодом и скриншотом проблемы

Когда я устанавливаю непрозрачность на 255, все выглядит так, как должно, белый становится белым.


person Vindolin    schedule 24.03.2014    source источник


Ответы (1)


вам необходимо обновить вашу версию Clutter до версии выше или равной 1.16.2 (последняя версия 1.16 — 1.16.4). в ClutterImage была ошибка, из-за которой смешанный цвет предварительно умножался без необходимости:

https://git.gnome.org/browse/clutter/commit/?h=clutter-1.16&id=32ccff85254f731cef6dab88d302eb3dcba93887

person ebassi    schedule 25.03.2014