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

📄 save.c

📁 LINUX下非常有名的视频采集和显示源代码,直接安装后可以使用,效果很好
💻 C
📖 第 1 页 / 共 2 页
字号:
  int lines, pixels_per_line;  unsigned char buff[3];  struct jpeg_compress_struct cinfo;  struct jpeg_error_mgr jerr;  JSAMPROW row_pointer[1];     // pointer to JSAMPLE row(s)  int row_stride;              // physical row width in image buffer  if(!strcmp(camera->savefile, ""))    outfile = stdout;  else if(camera->savefile != NULL)    outfile = fopen(camera->savefile, "w");  if (outfile == NULL){    errordialog("Could not open file");    return;  }  cinfo.err = jpeg_std_error(&jerr);  jpeg_create_compress(&cinfo);    jpeg_stdio_dest(&cinfo, outfile);  cinfo.image_width = camera->vid_win.width;  cinfo.image_height = camera->vid_win.height;    if (camera->greyscale) {    cinfo.input_components = 1;    cinfo.in_color_space = JCS_GRAYSCALE;       }  else {    cinfo.input_components = 3;    cinfo.in_color_space = JCS_RGB;  }    cinfo.smoothing_factor = camera->save_struct.smoothness;  if (camera->save_struct.smoothness) {    cinfo.optimize_coding = TRUE;  }    jpeg_set_defaults(&cinfo);  jpeg_set_quality(&cinfo, camera->save_struct.quality, TRUE);  jpeg_start_compress(&cinfo, TRUE);  row_stride = cinfo.input_components*camera->vid_win.width;  while (cinfo.next_scanline < cinfo.image_height) {    row_pointer[0] = &camera->pic[cinfo.next_scanline * row_stride];    jpeg_write_scanlines(&cinfo, row_pointer, 1);  }  jpeg_finish_compress(&cinfo);  jpeg_destroy_compress(&cinfo);  /*  struct jpeg_compress_struct cinfo;  struct jpeg_error_mgr jerr;  JSAMPROW row_pointer[1];     // pointer to JSAMPLE row(s)  int row_stride;              // physical row width in image buffer  cinfo.err = jpeg_std_error(&jerr);  jpeg_create_compress(&cinfo);    jpeg_stdio_dest(&cinfo, outf);  cinfo.image_width = camera->vid_win.width;  cinfo.image_height = camera->vid_win.height;  if (camera->greyscale) {    cinfo.input_components = 1;       cinfo.in_color_space = JCS_GRAYSCALE;       }  else {    cinfo.input_components = 3;    cinfo.in_color_space = JCS_RGB;  }  cinfo.optimize_coding = TRUE;  jpeg_set_defaults(&cinfo);  jpeg_set_quality(&cinfo, 75, TRUE );  jpeg_start_compress(&cinfo, TRUE);  row_stride = cinfo.input_components*camera->vid_win.width;  while (cinfo.next_scanline < cinfo.image_height) {    row_pointer[0] = &camera->pic[cinfo.next_scanline * row_stride];    jpeg_write_scanlines(&cinfo, row_pointer, 1);  }  jpeg_finish_compress(&cinfo);  jpeg_destroy_compress(&cinfo);*/  fclose(outfile);  return;}void save_cancel(GtkWidget *widget, struct Camera *camera){  gtk_widget_destroy(widget->parent->parent->parent);  camera->saving = 0;  if( !camera->frozen )    pthread_mutex_unlock(&camera->freeze_mutex);  return;}void destroy( GtkWidget *widget,	      gpointer   data ){  gtk_main_quit();}void switch_page_png(GtkWidget *widget, struct Camera *camera){  gtk_widget_hide(camera->currentsavepage);  gtk_widget_show(camera->page_png.frame_png);  camera->currentsavepage = camera->page_png.frame_png;  camera->savetype = PNG;}void switch_page_jpeg(GtkWidget *widget, struct Camera *camera){  gtk_widget_hide(camera->currentsavepage);  gtk_widget_show(camera->page_jpeg.frame_jpeg);  camera->currentsavepage = camera->page_jpeg.frame_jpeg;  camera->savetype = JPEG;}void switch_page_ppm(GtkWidget *widget, struct Camera *camera){  gtk_widget_hide(camera->currentsavepage);  gtk_widget_show(camera->page_ppm.frame_ppm);  camera->currentsavepage = camera->page_ppm.frame_ppm;  camera->savetype = PPM;}void save_dialog(GtkWidget *widget, struct Camera *camera){  GtkWidget *notebook;  GtkWidget *window;  GtkWidget *label;  GtkWidget *button;  GtkWidget *vbox, *hbox;  GtkWidget *typemenu;  GtkWidget *typemenubutton;  GtkWidget *ppmitem;  GtkWidget *jpegitem;  GtkWidget *pngitem;  //int openpage = camera->savetype;  pthread_mutex_lock( &camera->pref_mutex );  if( !camera->frozen )    pthread_mutex_lock(&camera->freeze_mutex);  camera->saving = 1;  pthread_mutex_unlock( &camera->pref_mutex );  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE);  gtk_window_set_title (GTK_WINDOW (window), "Gqcam: Save Image");  vbox = gtk_vbox_new(FALSE, 0);  gtk_container_add (GTK_CONTAINER (window), vbox);  gtk_widget_show(vbox);    hbox = gtk_hbox_new(FALSE, 0);  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 2);  label = gtk_label_new("File:");  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);  gtk_widget_show(label);  camera->save_struct.textbox = gtk_entry_new();  gtk_box_pack_start(GTK_BOX(hbox), camera->save_struct.textbox, FALSE, FALSE, 2);  if(camera->save_struct.isinfo)    gtk_entry_set_text(GTK_ENTRY(camera->save_struct.textbox), camera->savefileclean);  gtk_widget_show(camera->save_struct.textbox);  button = gtk_button_new_with_label("Browse...");  gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (file_select), camera);  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 2);  gtk_widget_show(button);  gtk_widget_show(hbox);  hbox = gtk_hbox_new(FALSE, 0);  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 2);  typemenubutton = gtk_option_menu_new();  gtk_box_pack_start(GTK_BOX(hbox), typemenubutton, FALSE, FALSE, 2);  gtk_widget_show(hbox);    typemenu = gtk_menu_new();  pngitem = gtk_menu_item_new_with_label("png");  gtk_menu_append(GTK_MENU(typemenu), pngitem);  gtk_signal_connect(GTK_OBJECT (pngitem), "activate",                     GTK_SIGNAL_FUNC (switch_page_png), camera);  gtk_widget_show(pngitem);  ppmitem = gtk_menu_item_new_with_label("ppm");  gtk_menu_append(GTK_MENU(typemenu), ppmitem);  gtk_signal_connect(GTK_OBJECT (ppmitem), "activate",                     GTK_SIGNAL_FUNC (switch_page_ppm), camera);  gtk_widget_show(ppmitem);    jpegitem = gtk_menu_item_new_with_label("jpeg");  gtk_menu_append(GTK_MENU(typemenu), jpegitem);  gtk_signal_connect(GTK_OBJECT (jpegitem), "activate",                     GTK_SIGNAL_FUNC (switch_page_jpeg), camera);  gtk_widget_show(jpegitem);  gtk_option_menu_set_menu(GTK_OPTION_MENU(typemenubutton), typemenu);  gtk_option_menu_set_history(GTK_OPTION_MENU(typemenubutton), camera->savetype);  gtk_widget_show(typemenubutton);  camera->save_struct.timebutton = gtk_check_button_new_with_label("Append time to filename");  gtk_box_pack_start(GTK_BOX(hbox), camera->save_struct.timebutton, FALSE, FALSE, 2);  gtk_widget_show(camera->save_struct.timebutton);    /* PPM PAGE */  camera->page_ppm.frame_ppm = gtk_frame_new("Save As");  gtk_frame_set_shadow_type(GTK_FRAME(camera->page_ppm.frame_ppm), GTK_SHADOW_ETCHED_IN);  camera->page_ppm.vbox_ppm = gtk_vbox_new(FALSE, 0);  gtk_container_add(GTK_CONTAINER(camera->page_ppm.frame_ppm), camera->page_ppm.vbox_ppm);  gtk_widget_show(camera->page_ppm.vbox_ppm);  camera->page_ppm.radio_raw_ppm = gtk_radio_button_new_with_label(NULL, "Raw");  gtk_box_pack_start(GTK_BOX(camera->page_ppm.vbox_ppm), camera->page_ppm.radio_raw_ppm, FALSE, FALSE, 2);  gtk_widget_show(camera->page_ppm.radio_raw_ppm);    camera->page_ppm.group_ppm = gtk_radio_button_group(GTK_RADIO_BUTTON(camera->page_ppm.radio_raw_ppm));  camera->page_ppm.radio_ascii_ppm = gtk_radio_button_new_with_label(camera->page_ppm.group_ppm, "ASCII");  gtk_box_pack_start(GTK_BOX(camera->page_ppm.vbox_ppm), camera->page_ppm.radio_ascii_ppm, FALSE, FALSE, 2);  gtk_widget_show(camera->page_ppm.radio_ascii_ppm);  if(camera->savetype == PPM){    gtk_widget_show(camera->page_ppm.frame_ppm);    camera->currentsavepage = camera->page_ppm.frame_ppm;  }    gtk_box_pack_start(GTK_BOX(vbox), camera->page_ppm.frame_ppm, FALSE, FALSE, 2);  /* JPEG PAGE */  camera->page_jpeg.frame_jpeg = gtk_frame_new(NULL);  gtk_frame_set_shadow_type(GTK_FRAME(camera->page_jpeg.frame_jpeg), GTK_SHADOW_ETCHED_IN);  camera->page_jpeg.vbox_jpeg = gtk_vbox_new(FALSE, 0);  gtk_container_add(GTK_CONTAINER(camera->page_jpeg.frame_jpeg), camera->page_jpeg.vbox_jpeg);  gtk_widget_show(camera->page_jpeg.vbox_jpeg);  camera->page_jpeg.table_jpeg = gtk_table_new(3, 3, TRUE);  gtk_box_pack_start(GTK_BOX(camera->page_jpeg.vbox_jpeg), camera->page_jpeg.table_jpeg, FALSE, FALSE, 2);  gtk_widget_show(camera->page_jpeg.table_jpeg);  camera->page_jpeg.label_jpeg = gtk_label_new("Quality");  gtk_table_attach_defaults(GTK_TABLE(camera->page_jpeg.table_jpeg), camera->page_jpeg.label_jpeg, 0, 1, 0, 1);  gtk_widget_show(camera->page_jpeg.label_jpeg);  camera->page_jpeg.quality_adj_jpeg = gtk_adjustment_new(75, 0, 100, 1, 10, 1);  camera->page_jpeg.quality_jpeg = gtk_hscale_new(GTK_ADJUSTMENT(camera->page_jpeg.quality_adj_jpeg));  gtk_scale_set_digits (GTK_SCALE(camera->page_jpeg.quality_jpeg), 0);  gtk_table_attach_defaults(GTK_TABLE(camera->page_jpeg.table_jpeg), camera->page_jpeg.quality_jpeg, 1, 3, 0, 1);  gtk_widget_show(camera->page_jpeg.quality_jpeg);  camera->page_jpeg.label_jpeg = gtk_label_new("Smoothness");  gtk_table_attach_defaults(GTK_TABLE(camera->page_jpeg.table_jpeg), camera->page_jpeg.label_jpeg, 0, 1, 1, 2);  gtk_widget_show(camera->page_jpeg.label_jpeg);  camera->page_jpeg.smooth_adj_jpeg = gtk_adjustment_new( 0, 0, 100, 1, 10, 1 );  camera->page_jpeg.smooth_jpeg = gtk_hscale_new(GTK_ADJUSTMENT(camera->page_jpeg.smooth_adj_jpeg));  gtk_range_set_update_policy (GTK_RANGE(camera->page_jpeg.smooth_jpeg), GTK_UPDATE_CONTINUOUS);  gtk_scale_set_digits (GTK_SCALE(camera->page_jpeg.smooth_jpeg), 0);  gtk_scale_set_value_pos (GTK_SCALE(camera->page_jpeg.smooth_jpeg), GTK_POS_TOP);  gtk_scale_set_draw_value (GTK_SCALE(camera->page_jpeg.smooth_jpeg), TRUE);  gtk_table_attach_defaults(GTK_TABLE(camera->page_jpeg.table_jpeg), camera->page_jpeg.smooth_jpeg, 1, 3, 1, 2);  gtk_widget_show(camera->page_jpeg.smooth_jpeg);  camera->page_jpeg.optimize_jpeg = gtk_check_button_new_with_label("Optimize");  gtk_table_attach_defaults(GTK_TABLE(camera->page_jpeg.table_jpeg), camera->page_jpeg.optimize_jpeg, 0, 1, 2, 3);  gtk_widget_show(camera->page_jpeg.optimize_jpeg);  gtk_box_pack_start(GTK_BOX(vbox), camera->page_jpeg.frame_jpeg, FALSE, FALSE, 2);  if(camera->savetype == JPEG){    gtk_widget_show(camera->page_jpeg.frame_jpeg);    camera->currentsavepage = camera->page_jpeg.frame_jpeg;  }/* PNG PAGE */  camera->page_png.frame_png = gtk_frame_new(NULL);  gtk_frame_set_shadow_type(GTK_FRAME(camera->page_png.frame_png), GTK_SHADOW_ETCHED_IN);  camera->page_png.vbox_png = gtk_vbox_new(FALSE, 0);  gtk_container_add(GTK_CONTAINER(camera->page_png.frame_png), camera->page_png.vbox_png);  gtk_widget_show(camera->page_png.vbox_png);  camera->page_png.interlace_png = gtk_check_button_new_with_label("Interlace");  gtk_box_pack_start(GTK_BOX(camera->page_png.vbox_png), camera->page_png.interlace_png, FALSE, FALSE, 2);  gtk_widget_show(camera->page_png.interlace_png);  camera->page_png.hbox_png = gtk_hbox_new(FALSE, 0);  gtk_box_pack_start(GTK_BOX(camera->page_png.vbox_png), camera->page_png.hbox_png, FALSE, FALSE, 2);  gtk_widget_show(camera->page_png.hbox_png);  camera->page_png.label_png = gtk_label_new("Compression");  gtk_box_pack_start(GTK_BOX(camera->page_png.hbox_png), camera->page_png.label_png, FALSE, FALSE, 2);  gtk_widget_show(camera->page_png.label_png);    camera->page_png.compression_adj_png = gtk_adjustment_new(6, 0, 10, 1, 1, 1);  camera->page_png.compression_png = gtk_hscale_new(GTK_ADJUSTMENT(camera->page_png.compression_adj_png));  gtk_range_set_update_policy (GTK_RANGE(camera->page_png.compression_png), GTK_UPDATE_CONTINUOUS);  gtk_scale_set_digits (GTK_SCALE(camera->page_png.compression_png), 0);  gtk_scale_set_value_pos (GTK_SCALE(camera->page_png.compression_png), GTK_POS_TOP);  gtk_scale_set_draw_value(GTK_SCALE(camera->page_png.compression_png), TRUE);  //gtk_table_attach_defaults(GTK_TABLE(camera->page_jpeg.table_jpeg), camera->page_jpeg.smooth_jpeg, 1, 3, 1, 2);  gtk_box_pack_start(GTK_BOX(camera->page_png.hbox_png), camera->page_png.compression_png, TRUE, TRUE, 2);  gtk_widget_show(camera->page_png.compression_png);    gtk_box_pack_start(GTK_BOX(vbox), camera->page_png.frame_png, FALSE, FALSE, 2);  if(camera->savetype == PNG){    gtk_widget_show(camera->page_png.frame_png);    camera->currentsavepage = camera->page_png.frame_png;  }  /* GIF PAGE *//*  page_gif.frame_gif = gtk_frame_new(NULL);  gtk_frame_set_shadow_type(GTK_FRAME(page_gif.frame_gif), GTK_SHADOW_NONE);  gtk_widget_show(page_gif.frame_gif);  page_gif.vbox_gif = gtk_vbox_new(FALSE, 0);  gtk_container_add(GTK_CONTAINER(page_gif.frame_gif), page_gif.vbox_gif);  gtk_widget_show(page_gif.vbox_gif);  page_gif.interlace_gif = gtk_check_button_new_with_label("Interlace");  gtk_box_pack_start(GTK_BOX(page_gif.vbox_gif), page_gif.interlace_gif, FALSE, FALSE, 2);  gtk_widget_show(page_gif.interlace_gif);  page_gif.comment_gif = gtk_check_button_new_with_label("Comment:");  gtk_box_pack_start(GTK_BOX(page_gif.vbox_gif), page_gif.comment_gif, FALSE, FALSE, 2);  gtk_widget_show(page_gif.comment_gif);  page_gif.comment_text_gif = gtk_text_new( NULL, NULL);  gtk_box_pack_start(GTK_BOX(page_gif.vbox_gif), page_gif.comment_text_gif, FALSE, FALSE, 2);  gtk_text_set_editable(GTK_TEXT(page_gif.comment_text_gif), TRUE);  gtk_widget_set_usize(GTK_WIDGET(page_gif.comment_text_gif), 100, 50);  gtk_widget_show(page_gif.comment_text_gif);    page_gif.label_gif = gtk_label_new("Gif");  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page_gif.frame_gif, page_gif.label_gif);*//* END PAGES *//*  gtk_notebook_set_page(GTK_NOTEBOOK(notebook), camera->savetype);*/  hbox = gtk_hbox_new(TRUE, 0);  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 2);  gtk_widget_show(hbox);  button = gtk_button_new_with_label("Ok");  gtk_signal_connect(GTK_OBJECT(button), "clicked", save_ok, camera);  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 5);  gtk_widget_show(button);  button = gtk_button_new_with_label("Cancel");  gtk_signal_connect(GTK_OBJECT(button), "clicked", save_cancel, camera);  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 5);  gtk_widget_show(button);    gtk_widget_show(window);  return;}void savefile_append_time(struct Camera *camera){  char *dotlocation;  char prefix[255+11], curtime[10];  int length;  dotlocation = strrchr(camera->savefileclean, '.');  if(dotlocation == NULL)    length = strlen(camera->savefileclean);  else    length = (dotlocation - camera->savefileclean)/(sizeof(char));  strncpy(prefix, camera->savefileclean, length);  sprintf(curtime, ".%d", time(NULL));  strcpy(prefix+length, curtime);  strcpy(prefix+length+strlen(curtime), camera->savefileclean+length);  //printf("%s\n", prefix);    strcpy(camera->savefile, prefix);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -