LinuxSir.cn,穿越时空的Linuxsir!

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

我的程序出现了Bug,就是在图片旋转之后在屏幕上方会出现一道白杠,并且从左至右越来越

[复制链接]
发表于 2008-7-22 12:13:40 | 显示全部楼层 |阅读模式
这是代码:
/*
* @System:  图片全屏显示
* @summary: 这是一个图片全屏显示的程序:
*           该程序将自动获取屏幕大小信息,
*           然后程序读取一个图片路径作为参数,
*           最后程序将产生该图片全屏显示的效果。
* @create:  2008.07.15 高然
*/

#include <gtk/gtk.h>
#include <stdlib.h>

/*
* Function:    delete_event
* Description: 这是一个回调函数。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;
}

/*
* Function:    destroy
* Description: 另一个回调函数
*/

void destroy( GtkWidget *widget,
              gpointer   data )
{
    gtk_main_quit ();
}

/*
* Function:    showPic
* Description: 这是一个显示图片函数。图片的路径作为参数传入,
*              然后将该函数的大小改变为屏幕大小。
* @param:      filename
*/

void showPic( char *filename )
{
    /* GtkWidget 是构件的存储类型 */
   
    GtkWidget *window;
    GtkWidget *image;
    const GdkPixbuf *src_pixbuf;
    GdkPixbuf *dest_pixbuf;
    GdkScreen *gdk_screen;
    GdkInterpType interp_type;
    gint screen_width, screen_height;
   
    /* 创建一个新窗口 */
    window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );  
   
    /* 读取图片参数,存于src_pixbuf中 */
    src_pixbuf = gdk_pixbuf_new_from_file ( filename, NULL );
   
    /* 获取屏幕信息保存于gdk_screen中 */
    gdk_screen = gdk_screen_get_default();
   
    /* 获取屏幕的宽和高数据 */
    screen_width = gdk_screen_get_width ( gdk_screen );
    screen_height = gdk_screen_get_height ( gdk_screen );
   
    /* 将src_pixbuf做成屏幕大小保存于dest_pixbuf中 */
    dest_pixbuf = gdk_pixbuf_scale_simple ( src_pixbuf,
                                            screen_width, screen_height,
                                            GDK_INTERP_NEAREST );  
                                         
    /* 从dest_pixbuf中读取图片存于image中 */
        image = gtk_image_new_from_pixbuf ( dest_pixbuf );

        /* 设置窗口大小 */
    gtk_window_set_default_size ( GTK_WINDOW ( window ),
                                  screen_width, screen_height );
   
        /* 将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 );
}

/*
* Function: main
* Description: 读取图片参数,调用showPic函数
*/

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-22 14:10:08 | 显示全部楼层
跪求高手相助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-31 11:43:27 | 显示全部楼层
当用Xrandr -o 1 命令使屏幕颠倒后,再运行这个程序会在屏幕上方出现白杠,到底怎么回事啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-31 11:49:34 | 显示全部楼层
当用Xrandr -o 1 命令使屏幕颠倒后,再运行这个程序会在屏幕上方出现白杠,到底怎么回事啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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