Как получить скриншот окна Gtk в формате PNG (альфа-канал)?


person blez    schedule 28.03.2012    source источник
comment
на скриншоте сложно увидеть, есть ли у результирующего изображения альфа-канал или нет...   -  person liberforce    schedule 28.03.2012
comment
Там, где альфа, черные пиксели.   -  person blez    schedule 28.03.2012
comment
Спасибо, что поделились своим решением. Мне нужен простой способ получить скриншоты экранов (мульти-мониторы). Мне было интересно, нашли ли вы это решение для этого?   -  person Noitidart    schedule 08.05.2015


Ответы (2)


В вашем примере ответ лежит на вызов gdk_pixbuf_get_from_drawable. В документации прямо сказано:

Если указанный пункт назначения pixbuf dest равен NULL, то эта функция создаст pixbuf RGB с 8 битами на канал и без альфа-канала с тем же размером, который указан аргументами ширины и высоты. В этом случае аргументы dest_x и dest_y должны быть указаны как 0. Если указанный целевой pixbuf не равен NULL и содержит информацию об альфа-канале, то заполненные пиксели будут иметь полную непрозрачность (альфа = 255). >.

Поэтому я думаю, что передачи pixbuf с альфа-каналом в качестве первого аргумента должно быть достаточно.

Другой способ сделать это — использовать cairo API, который будет работать с GTK 2 и GTK 3.

person liberforce    schedule 28.03.2012

...и как вы хотите альфа-шанель в

var pixbuf = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, true, 8, 500, 500);  ?

Если у него есть прозрачность (настоящая), то это rgba. Но у вас все еще могут быть проблемы с оконным менеджером, если он не составной, а имитирует это путем смешивания изображений, вернет черный ( 0 ) вместо значения цвета / альфа-канала.

person cox    schedule 07.06.2012