
Получится такой снимок:

Сделать это можно четырьмя строчками кода. Сначала создаём объект GdkPixbuf, которому в параметрах передаём тип
изображения - RGB, поддерживать (TRUE) или нет (FALSE) альфа-канал, глубину цвета, ширину и высоту изображения. С помощью метода get_from_drawable() помещаем всё содержимое окна в GdkPixbuf и методом save() сохраняем в файл.
Полный код программы:
<?php
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(400, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox();
$button = new GtkButton('Создать скриншот');
$button->connect('clicked', 'create_screenshot', $window);
$vbox->pack_start($button, FALSE);
$vbox_string = new GtkVBox();
$vbox_string->pack_start(new GtkLabel('Строка 1'));
$vbox_string->pack_start(new GtkLabel('Строка 2'));
$vbox_string->pack_start(new GtkLabel('Строка 3'));
$vbox_string->pack_start(new GtkLabel('Строка 4'));
$vbox->pack_start($vbox_string);
$window->add($vbox);
$window->show_all();
Gtk::main();
function create_screenshot($button, $widget)
{
$alloc = $widget->allocation;
$pixbuf = new GdkPixbuf(Gdk::COLORSPACE_RGB, TRUE, 8, $alloc->width, $alloc->height);
$pixbuf->get_from_drawable(
$widget->window,
$widget->window->get_colormap(),
$alloc->x,
$alloc->y,
0,
0,
$alloc->width,
$alloc->height
);
$pixbuf->save('screenshot.png', 'png');
}
?>
Комментариев нет:
Отправить комментарий