⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_cam.c

📁 gtk实现的图像采集的示例程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -