#python #pygtk #gtk #gdk #gdkpixbuf
#python #pygtk #gtk #gdk #gdkpixbuf
Вопрос:
Я создал экземпляр gtk.gdk.Pixmap
и нарисовал на нем что-то. Например:
pixmap = gtk.gdk.Pixmap(widget.window,100,800)
pixmap.draw_rectangle(gc, True, 0, 0, 100, 800)
pixmap.draw_line(gc, 0, 0,100, 800)
Как я могу изменить размер Pixmap
? Один из способов, который я вижу, — скопировать Pixmap
в PixBuf
с помощью gtk.gdk.Pixbuf.get_from_drawable
, затем изменить размер Pixbuf
, а затем скопировать Pixbuf
в Pixmap
Есть ли какой-нибудь способ сделать это без полного копирования?
Ответ №1:
К сожалению, это невозможно без всего этого копирования. Пожалуйста, обратите внимание, что GdkPixmap и GdkPixbuf устарели в пользу Cairo.
Ответ №2:
Действительно, они устарели.
Что еще более важно, GdkPixmap является ресурсом на стороне сервера — содержимое пиксельной карты хранится в памяти X-сервера. Когда вы выполняете get_from_drawable(), вы просите перенести это содержимое в ваше приложение, что является дорогостоящим.
Вместо этого создайте поверхность изображения Cairo и сделайте там свой рисунок. Это ресурс на стороне клиента, поэтому вы не получите такого снижения производительности. Поверхности изображений можно масштабировать, перенося их на другую поверхность с помощью подходящего преобразования.
Комментарии:
1. Круто, я на самом деле не знал, что копирование включает в себя цикл сервер-клиент.