我使用由Gtk.Image
支持的GdkPixbuf.Pixbuf
来显示照片。我根据父窗口小部件的size-allocate
信号缩放照片以适合可用空间。问题在于,在HiDPI显示器上,每个尺寸都以逻辑像素而不是设备像素为单位,因此会发生以下情况:
GdkPixbuf.Pixbuf
缩放到从size-allocate
信号得到的尺寸,则照片将占用所需的物理空间,但它仅使用显示器分辨率的一半(假设2: 1个设备像素与逻辑像素的比率)。GdkPixbuf.Pixbuf
的尺寸放大size-allocate
到https://stackoverflow.com/questions/*的倍数,则照片将占据两倍的物理空间(即无法容纳窗口)。如何让GTK知道我提供给图片的Pixbuf
对应于设备像素而不是逻辑像素?
答案 0 :(得分:2)
通常是通过根据像素数据创建一个开罗表面,然后使用gtk_image_set_from_surface()
来完成的。我不会说Python,但是在C语言中我是这样的:
GdkPixbuf *pb = gdk_pixbuf_new_from_file(file, NULL);
if(pb) {
cairo_surface_t *s = gdk_cairo_surface_create_from_pixbuf(pb, 0, gtk_widget_get_window(w));
if(s) {
gtk_image_set_from_surface(GTK_IMAGE(w), s);
cairo_surface_destroy(s);
}
g_object_unref(pb);
}
在这里工作正常。与gtk_image_set_from_file()
相比,它不使用逻辑像素,而是使用设备像素,因此永远不会应用缩放。