コマンドライン引数が指定する画像をウィンドウに表示させるプログラムです。

画像ウェジェットを作成してバッキンボックス上に張り付けてあげればOKです。


/* gtk_picutre.c */
#include<gtk/gtk.h>
#include<stdlib.h> //exit

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

//引数のエラー処理
if(argc!=2){
g_print("Usage: %s image-file\n", argv[0]);
exit(1);
}


GtkWidget *window;

//gtk+を初期化
gtk_init(&argc, &argv);

//ウィンドウェジェットを作成
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

//ウィンドウの大きさを指定
gtk_widget_set_size_request(window, 600, 400);

//パッキンボックスを作成
GtkWidget *vbox;
vbox = gtk_vbox_new(FALSE,2);

//パッキンボックスをwindowに貼り付ける
gtk_container_add(GTK_CONTAINER(window), vbox);


//画像ウェジェットを作成
GtkWidget *image;
//コマンドライン引数が指定するファイルから画像ウェジェットを作成
image = gtk_image_new_from_file(argv[1]);
//画像ウェジェットをvboxの上半分に貼り付ける
gtk_box_pack_start(GTK_BOX(vbox), image, TRUE, TRUE, 0);

//ボタンを作成
GtkWidget *button;
button = gtk_button_new_with_label("quit");

//ボタンをクリックした時のコールバック関数を登録
g_signal_connect(G_OBJECT(button), "clicked",      G_CALLBACK(gtk_main_quit),NULL);

//buttonをvboxの下半分に貼り付ける
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE,FALSE, 0);


//ウィンドを閉じたときにプログラムを終了するようにコールバックする。
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

//ウィンドウ上のウェジェットをすべて表示(gtk_widget_show_all)
gtk_widget_show_all(window);

gtk_main();

return 0;
}


#使用例
#引数を与えないとエラーがでます
$ ./gtk_picture 
Usage: ./gtk_picture image-file

#current directoryにtux.pngという画像ファイルを置いた状態で以下のように引数をつけてプログラムを実行
$ ./gtk_picture tux.png