?? gtk_cam.c
字號:
dh_GetHue (bt8x8_handle, &h_current); gtk_widget_destroy (GTK_WIDGET (window));}static voidclick_cancel (GtkWidget * widget, gpointer window){ dh_SetBrightness (bt8x8_handle, b_current); dh_SetContrast (bt8x8_handle, c_current); dh_SetSaturation (bt8x8_handle, s_current); dh_SetHue (bt8x8_handle, h_current); gtk_adjustment_set_value ((GtkAdjustment *) b_adj, b_current); gtk_adjustment_set_value ((GtkAdjustment *) c_adj, c_current); gtk_adjustment_set_value ((GtkAdjustment *) s_adj, s_current); gtk_adjustment_set_value ((GtkAdjustment *) h_adj, h_current);}static voidclick_default (GtkWidget * widget, gpointer window){ dh_SetBrightness (bt8x8_handle, 65535 / 2); dh_SetContrast (bt8x8_handle, 65535 / 2); dh_SetSaturation (bt8x8_handle, 65535 / 2); dh_SetHue (bt8x8_handle,65535 / 2); gtk_adjustment_set_value ((GtkAdjustment *) b_adj, 65535 / 2); gtk_adjustment_set_value ((GtkAdjustment *) c_adj, 65535 / 2); gtk_adjustment_set_value ((GtkAdjustment *) s_adj, 65535 / 2); gtk_adjustment_set_value ((GtkAdjustment *) h_adj,65535 / 2);}static voidabout (void){ GtkWidget *win, *vbox, *button, *hbox, *label; win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (win), "About"); gtk_widget_set_usize (GTK_WIDGET (win), 300, 90); gtk_widget_realize (win); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (win), vbox); gtk_widget_show (vbox); label = gtk_label_new ("This is a CG300 demo program. "); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, FALSE, 0); gtk_widget_show (label); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, FALSE, 0); gtk_widget_show (hbox); button = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, FALSE, 10); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) click_ok, (gpointer) win); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_widget_grab_default (button); gtk_widget_show (button); gtk_widget_show (win);}/*-------------------------------- Scale Fun------------------------------------------*///回調函數,拖動滑動條改變圖像屬性voidset_brightness (GtkAdjustment * adj){ dh_SetBrightness (bt8x8_handle, (gint) adj->value);}voidset_contrast (GtkAdjustment * adj){ dh_SetContrast (bt8x8_handle, (gint) adj->value);}voidset_saturation (GtkAdjustment * adj){ dh_SetSaturation (bt8x8_handle, (gint) adj->value);}voidset_hue (GtkAdjustment * adj){ dh_SetHue (bt8x8_handle, (gint) adj->value);}static voidscale_effect (void){ GtkWidget *sourcewin; GtkWidget *vbox, *b_box, *c_box, *s_box, *h_box, *o_box; GtkWidget *ok_button, *default_button, *cancel_button; GtkWidget *separator; dh_GetBrightness (bt8x8_handle, &b_current); dh_GetContrast (bt8x8_handle, &c_current); dh_GetSaturation (bt8x8_handle, &s_current); dh_GetHue (bt8x8_handle, &h_current); //標尺組件 GtkWidget *b_hscale, *c_hscale, *s_hscale, *h_hscale; GtkWidget *b_label, *c_label, *s_label, *h_label;/*------------------------得到當前圖像屬性-------------------------------------------*/ //建立頂級窗口 sourcewin = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (sourcewin), "scale controls"); //建立一個垂直容器, 可以垂直安排組件和水平的容器 vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (sourcewin), vbox); gtk_widget_show (vbox);/*---------------------------------Brightness scale---------------------------------------------*/ //建立第一個水平容器, 容納一個標簽和滑動條 b_box = gtk_hbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (b_box), 10); gtk_box_pack_start (GTK_BOX (vbox), b_box, TRUE, TRUE, 0); gtk_widget_show (b_box); //建立調節物體 b_adj = gtk_adjustment_new (b_current, 0, 65536, 100, 1000, 1); //建立label b_label = gtk_label_new ("Brightness:"); gtk_box_pack_start (GTK_BOX (b_box), b_label, FALSE, FALSE, 0); gtk_widget_show (b_label); //建立水平標尺 b_hscale = gtk_hscale_new (GTK_ADJUSTMENT (b_adj)); gtk_widget_set_usize (GTK_WIDGET (b_hscale), 200, 30); gtk_box_pack_start (GTK_BOX (b_box), b_hscale, TRUE, TRUE, 0); gtk_widget_show (b_hscale); gtk_signal_connect (GTK_OBJECT (b_adj), "value_changed", GTK_SIGNAL_FUNC (set_brightness), NULL);/*---------------------------------Contrast scale---------------------------------------------*/ //建立水平容器, 容納一個標簽和滑動條 c_box = gtk_hbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (c_box), 10); gtk_box_pack_start (GTK_BOX (vbox), c_box, TRUE, TRUE, 0); gtk_widget_show (c_box); //建立調節物體 c_adj = gtk_adjustment_new (c_current, 0, 65536, 100, 1000, 1); //建立label c_label = gtk_label_new (" Contrast:"); gtk_box_pack_start (GTK_BOX (c_box), c_label, FALSE, FALSE, 0); gtk_widget_show (c_label); //建立水平標尺 c_hscale = gtk_hscale_new (GTK_ADJUSTMENT (c_adj)); gtk_widget_set_usize (GTK_WIDGET (c_hscale), 200, 30); gtk_box_pack_start (GTK_BOX (c_box), c_hscale, TRUE, TRUE, 0); gtk_widget_show (c_hscale); gtk_signal_connect (GTK_OBJECT (c_adj), "value_changed", GTK_SIGNAL_FUNC (set_contrast), NULL);/*---------------------------------Saturation scale---------------------------------------------*/ //建立水平容器, 容納一個標簽和滑動條 s_box = gtk_hbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (s_box), 10); gtk_box_pack_start (GTK_BOX (vbox), s_box, TRUE, TRUE, 0); gtk_widget_show (s_box); //建立調節物體 s_adj = gtk_adjustment_new (s_current, 0, 65536, 100, 1000, 1); //建立label s_label = gtk_label_new ("Saturation:"); gtk_box_pack_start (GTK_BOX (s_box), s_label, FALSE, FALSE, 0); gtk_widget_show (s_label); //建立水平標尺 s_hscale = gtk_hscale_new (GTK_ADJUSTMENT (s_adj)); gtk_widget_set_usize (GTK_WIDGET (s_hscale), 200, 30); gtk_box_pack_start (GTK_BOX (s_box), s_hscale, TRUE, TRUE, 0); gtk_widget_show (s_hscale); gtk_signal_connect (GTK_OBJECT (s_adj), "value_changed", GTK_SIGNAL_FUNC (set_saturation), NULL);/*---------------------------------Hue scale---------------------------------------------*/ //建立水平容器, 容納一個標簽和滑動條 h_box = gtk_hbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (h_box), 10); gtk_box_pack_start (GTK_BOX (vbox), h_box, TRUE, TRUE, 0); gtk_widget_show (h_box); //建立調節物體 h_adj = gtk_adjustment_new (h_current, 0, 65536, 100, 1000, 1); //建立label h_label = gtk_label_new (" Hue :"); gtk_box_pack_start (GTK_BOX (h_box), h_label, FALSE, FALSE, 0); gtk_widget_show (h_label); //建立水平標尺 h_hscale = gtk_hscale_new (GTK_ADJUSTMENT (h_adj)); gtk_widget_set_usize (GTK_WIDGET (h_hscale), 200, 30); gtk_box_pack_start (GTK_BOX (h_box), h_hscale, TRUE, TRUE, 0); gtk_widget_show (h_hscale); gtk_signal_connect (GTK_OBJECT (h_adj), "value_changed", GTK_SIGNAL_FUNC (set_hue), NULL);/*--------------------------------- separator---------------------------------------------*/ separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0); gtk_widget_show (separator);/*---------------------------------OK button---------------------------------------------*/ o_box = gtk_hbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (o_box), 10); gtk_box_pack_start (GTK_BOX (vbox), o_box, FALSE, TRUE, 0); gtk_widget_show (o_box); ok_button = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (o_box), ok_button, TRUE, FALSE, 10); gtk_signal_connect (GTK_OBJECT (ok_button), "clicked", (GtkSignalFunc) click_ok, (gpointer) sourcewin); GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); gtk_widget_grab_default (ok_button); gtk_widget_show (ok_button);/*---------------------------------cancel button --------------------------------------*/ cancel_button = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (o_box), cancel_button, TRUE, FALSE, 10); gtk_signal_connect (GTK_OBJECT (cancel_button), "clicked", (GtkSignalFunc) click_cancel, (gpointer) sourcewin); gtk_widget_show (cancel_button);/*---------------------------------default button --------------------------------------*/ default_button = gtk_button_new_with_label ("Default"); gtk_box_pack_start (GTK_BOX (o_box), default_button, TRUE, FALSE, 10); gtk_signal_connect (GTK_OBJECT (default_button), "clicked", (GtkSignalFunc) click_default, (gpointer) sourcewin); gtk_widget_show (default_button); gtk_widget_show (sourcewin);}static GtkItemFactoryEntry menu_items[] = { {"/_Preview", "<control>P", preview_display, 0, NULL}, {"/_Overlay", "<control>O", overlay_display, 0, NULL}, {"/_Grab", "<control>G", grab_one_display, 0, NULL}, {"/Options", NULL, NULL, 0, "<Branch>"}, {"/Options/SourceInput", NULL, NULL, 0, "<Branch>"}, {"/Options/SourceInput/Video-_0", "<control>0", set_ch_video0, 0, NULL}, {"/Options/SourceInput/Video-_1", "<control>1", set_ch_video1, 0, NULL}, {"/Options/SourceInput/Video-_2", "<control>2", set_ch_video2, 0, NULL}, {"/Options/SourceInput/S-Video", "<control>3", set_ch_video3, 0, NULL}, {"/Options/SourceNorm", NULL, NULL, 0, "<Branch>"}, {"/Options/SourceNorm/P_AL", "<control>A", set_norm_pal, 0, NULL}, {"/Options/SourceNorm/_NTSC", "<control>N", set_norm_ntsc, 0, NULL}, {"/Options/SourceNorm/_SECAM", "<control>S", set_norm_secam, 0, NULL}, {"/Options/Picture_Control", "<control>C", scale_effect, 0, NULL}, {"/_Quit", "<control>Q", exit_program, 0, NULL}, {"/_Help", NULL, NULL, 0, "<LastBranch>"}, {"/_Help/About", NULL, about, 0, NULL},};voidget_main_menu (GtkWidget * window, GtkWidget ** menubar){ GtkItemFactory *item_factory; GtkAccelGroup *accel_group; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); accel_group = gtk_accel_group_new (); item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group); gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); if (menubar) *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}intmain (int argc, char *argv[]){ GtkWidget *main_vbox; GtkWidget *menubar; gtk_init (&argc, &argv); gdk_init (&argc, &argv); gdk_rgb_init (); open_dev (); main_win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_uposition (main_win, TOP, LEFT); gtk_signal_connect (GTK_OBJECT (main_win), "destroy", GTK_SIGNAL_FUNC (exit_program), NULL); gtk_window_set_title (GTK_WINDOW (main_win), "CG300_GTK+Viewer"); main_vbox = gtk_vbox_new (FALSE, 1); gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (main_win), main_vbox); gtk_widget_show (main_vbox); get_main_menu (main_win, &menubar); gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); gtk_widget_show (menubar); darea = gtk_drawing_area_new (); gtk_box_pack_start (GTK_BOX (main_vbox), darea, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (darea), "configure_event", GTK_SIGNAL_FUNC (configure_event), NULL); gtk_drawing_area_size (GTK_DRAWING_AREA (darea), COLS, ROWS); gtk_widget_show (darea); status = gtk_statusbar_new (); gtk_box_pack_start (GTK_BOX (main_vbox), status, FALSE, FALSE, 0); gtk_statusbar_push (GTK_STATUSBAR (status), 1, "Ready"); gtk_widget_show (status); gtk_widget_show (main_win); gtk_main (); return (0);}gint configure_event (GtkWidget * widget){ gint w, h; w = widget->allocation.width; h = widget->allocation.height; COLS = (w / 4) * 4; ROWS = (h / 2) * 2; if (COLS > 768) { COLS = 768; } if (ROWS > 576) { ROWS = 576; } sprintf (title, "COLS=%d, ROWS=%d.", COLS, ROWS); gtk_statusbar_push (GTK_STATUSBAR (status), 1, title); fprintf (stderr, "%s\n", title); return TRUE;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -