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

Поскольку 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, фон темнеет даже там, где он белый.

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам