26 марта 2010 г.

Создание скриншота программы

PHP-GTK позволяет создать снимок всего содержимого окна программы (к сожалению, за рамками окна снять не получится). То есть из такой программы:

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


Сделать это можно четырьмя строчками кода. Сначала создаём объект 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');
}
 
?>

Комментариев нет: