Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何制作可缩放的GTK_图像_C_Gtk - Fatal编程技术网

C 如何制作可缩放的GTK_图像

C 如何制作可缩放的GTK_图像,c,gtk,C,Gtk,我想有一个窗口内显示的图像,将缩放时,用户调整窗口的大小。我尝试过使用大小分配事件,如下所示: static gboolean allocback(GtkWidget *w, GtkAllocation *a, char *data) { /* pix is a pixbuf of the full image */ gtk_image_set_from_pixbuf(GTK_IMAGE(image), pix); /* scale_image just scales

我想有一个窗口内显示的图像,将缩放时,用户调整窗口的大小。我尝试过使用大小分配事件,如下所示:

static gboolean allocback(GtkWidget *w, GtkAllocation *a, char *data) {

    /* pix is a pixbuf of the full image */
    gtk_image_set_from_pixbuf(GTK_IMAGE(image), pix);
    /* scale_image just scales the pixbuf of GTK_IMAGE keeping the ratio*/
    scale_image(GTK_IMAGE(image), a->width, a->height);

    return FALSE;
}
大体上:

g_signal_connect(G_OBJECT(window), "size-allocate", G_CALLBACK(allocback), NULL);
这仅在使窗口变大时有效,但不能使其变小,因为图像已分配了大小。我可以用->宽度-100或者其他什么,但我相信有更好的方法。 另一件在我的解决方案中不起作用的事情是从最大化窗口返回。我希望它回到最大化的尺寸。现在它只是取消了窗口的最大化,但是图像仍然是相同的宽度和高度,使得窗口也与图像具有相同的宽度和高度


有人有什么好的解决办法吗?

我找到了解决办法。我只是把图像放在一个滚动窗口里

滚动窗口很好。:)如果我调整窗口的大小,我不喜欢图像缩放,但是能够用鼠标滚轮缩放图像还是不错的。我只在Python中使用GTK+,但我假设您具有相同的函数。我使用
pixmap.scale\u simple()
,插值类型为
gtk.gdk.INTERP\u双线性
。是的,我在scale\u图像函数中也使用gdk\u pixbuf\u scale\u simple