如何在GTK+中拉伸图像
how to stretch an image in GTK+?
我使用下面的代码来设置背景图像,但由于图像的大小很小,我想拉伸大小以适合屏幕,或者如果图像比屏幕大,在这种情况下,我也需要相同的
使用Gtk+3.2
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *layout;
GtkWidget *image;
GtkWidget *button;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 290, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
layout = gtk_layout_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER (window), layout);
gtk_widget_show(layout);
image = gtk_image_new_from_file("/home/my_background_image.jpg");
gtk_layout_put(GTK_LAYOUT(layout), image, 0, 0);
button = gtk_button_new_with_label("Button");
gtk_layout_put(GTK_LAYOUT(layout), button, 150, 50);
gtk_widget_set_size_request(button, 80, 35);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
我不认为你真的需要布局设置背景图像。你可以重载"绘制"信号,在处理程序中你可以绘制背景图像。下面的代码将为您工作。
gboolean GtkDrawing::window_draw_cb (GtkWidget * widget, cairo_t * cr, cairo_surface_t* m_bgImage)
{
gint root_width,root_height;
cairo_set_source_surface (cr,m_bgImage, 0, 0);
gtk_window_get_size (GTK_WINDOW(widget), &root_width, &root_height);
cairo_rectangle (cr, 0, 0,root_width, root_height);
cairo_fill (cr);
//Enable Below code to draw child widget after background rendering
//gtk_widget_draw (childwidget, cr);
//cairo_fill (cr);
return TRUE;
}
cairo_surface_t* m_bgImage=cairo_image_surface_create_from_png("/home/my_background_image.png");
g_signal_connect (G_OBJECT (window), "draw", G_CALLBACK(GtkDrawing::window_draw_cb), m_bgImage);
在上面的处理函数中,可以修改cairo_rectangle参数来拉伸图像。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何在运行中期切换GTK CSS style_context
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用 GTK 将 EGL 图像渲染到帧缓冲区
- 如何使用 GTK 将图像添加到按钮
- 如何使用GLADE和GTKMM C 重新绘制GTK ::图像组件
- GTK图像突然不会刷新任何错误或警告
- 尝试将 GTK+ 窗口呈现为图像
- 从Gtk::TreeStore中删除图像的时髦方法
- GTKMM::在GTk::绘图区域使用单个Gdk::PixBuf绘制多个图像
- GTK+ 3, c++ -创建按钮与库存图像
- 创建一个Gtk按钮,背景中有一个图像,前面有一个标签
- 在c++gtk::drawinare:如何刷新图像
- 如何在GTK+中拉伸图像