LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4170|回复: 17

这是Linux下用GTK编写的一个显示图片的程序,如何使小图片拉伸。跟壁纸似的,跪求达人…

[复制链接]
发表于 2008-7-11 15:44:52 | 显示全部楼层 |阅读模式
#include <gtk/gtk.h>
#include <stdlib.h>

#define SIZE 50

/* 这是一个回调函数。data 参数在本示例中被忽略。
* 后面有更多的回调函数示例。
*/
gint delete_event( GtkWidget *widget,
                  GdkEvent  *event,
  gpointer  data )
{
    /* 如果你的 "delete_event" 信号处理函数返回 FALSE,GTK 会发出 "destroy" 信号。
    * 返回 TRUE,你不希望关闭窗口。
    * 当你想弹出“你确定要退出吗?”对话框时它很有用。
    */

    g_print ("delete event occurred\n");

    /* 改 FALSE 为 TRUE 程序不会关闭。*/

    return FALSE;
}

/* 另一个回调函数 */
void destroy( GtkWidget *widget,
              gpointer  data )
{
    gtk_main_quit ();
}

/* 这是一个显示图片函数。图片的路径作为参数传入
*/
void showPic( char *args )
{
    /* GtkWidget 是构件的存储类型 */
    GtkWidget *window;
    GtkWidget *image;
   
    /* 创建一个新窗口 */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    /* 创建一个image变量 */
image = gtk_image_new_from_file(args);

/* 设置窗口大小 */
    gtk_window_set_default_size(GTK_WINDOW(window), 1280, 800);
    gtk_widget_set_size_request(image, 1280, 800);
   
/* 将window作为容器加入图片image */
gtk_container_add(GTK_CONTAINER (window), image);

   
    /* 当窗口收到 "delete_event" 信号 (这个信号由窗口管理器发出,通常是“关闭”
    * 选项或是标题栏上的关闭按钮发出的),我们让它调用在前面定义的 delete_event() 函数。
    * 传给回调函数的 data 参数值是 NULL,它会被回调函数忽略。
    */
    g_signal_connect (G_OBJECT (window), "delete_event",
      G_CALLBACK (delete_event), NULL);
   
    /* 在这里我们连接 "destroy" 事件到一个信号处理函数。
    * 对这个窗口调用 gtk_widget_destroy() 函数或在 "delete_event" 回调函数中返回 FALSE 值
    * 都会触发这个事件。
    */
    g_signal_connect (G_OBJECT (window), "destroy",
      G_CALLBACK (destroy), NULL);
   
    /* 设置窗口边框的宽度。*/
    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
   
    /* 显示窗口 */
    gtk_widget_show_all (window);
}

int main( int argc, char *argv[] )
{

    /* 这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到该程序中 */
    gtk_init (&argc, &argv);

    /* 调用 showPic()函数,传入URL参数 */
    showPic(argv[1]);

    /* 所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里
    * 等待事件 (如键盘事件或鼠标事件) 的发生。
    */
    gtk_main ();
   
    return 0;
}
发表于 2008-7-12 10:31:14 | 显示全部楼层
用gdkpixbuf
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-12 12:31:40 | 显示全部楼层
用过,我刚学GTK能不能给点具体的提示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-12 12:33:36 | 显示全部楼层
gdkbuf该用什么函数。
PS:Google百度都被我搜遍了……试过很多没有成功
回复 支持 反对

使用道具 举报

发表于 2008-7-12 14:22:43 | 显示全部楼层
不好意思,现在手头没有,周一到公司给你看一下,贴上部分代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-12 14:26:19 | 显示全部楼层
那就太感谢了,我也努力学习:)
回复 支持 反对

使用道具 举报

发表于 2008-7-12 20:45:39 | 显示全部楼层
gtk-demo 中不是有一个 pixbuf 的示例么, 实现的就是拉伸效果.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-13 12:16:17 | 显示全部楼层
示例在哪,我是菜鸟,刚接触Linux和Gtk,麻烦指教
回复 支持 反对

使用道具 举报

发表于 2008-7-13 13:55:17 | 显示全部楼层
运行 gtk-demo
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-13 16:57:22 | 显示全部楼层
弄出来了,可是编译有很多错误,具体对我这代码应该做哪些修改呢,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表