簡體   English   中英

gtk 圖像突然不刷新,沒有任何錯誤或警告

[英]gtk image suddenly do not refresh without any errors or warnings

我開發了一個工具來從相機捕獲圖像並在窗口中顯示捕獲的圖像。 GUI 窗口基於 GTK 2.4。 開始時,該工具運行正常,圖像從相機捕獲並實時顯示在窗口上。 過了一會兒,窗口上的圖像突然不再刷新,但它仍然是從相機中捕獲的。 沒有錯誤或警告。 有沒有人遇到過這樣的情況? 謝謝你。

Ubuntu 18.04,GTK 2.4

  // loop to call the following code to refresh the image on the window
  pixbuf_ = Gdk::Pixbuf::create_from_data(
      final_img_buf_.data, Gdk::COLORSPACE_RGB, false, 8, final_img_buf_.cols,
      final_img_buf_.rows, static_cast<int>(final_img_buf_.step));
  gtk_image_.set(pixbuf_);

編輯於 2019-02-27 感謝您的所有回復。 我已將 GTK 升級到 GTK+ 3,但仍然出現此問題。

  // loop to call the following code to refresh the image on the window
  pixbuf_ = Gdk::Pixbuf::create_from_data(
      final_img_buf_.data, Gdk::COLORSPACE_RGB, false, 8, final_img_buf_.cols,
      final_img_buf_.rows, static_cast<int>(final_img_buf_.step));
  // ensure the image is normally updating
  //std::this_thread::sleep_for (std::chrono::milliseconds(30));
  gtk_image_.set(pixbuf_);
  Glib::RefPtr<Gdk::Pixbuf> pixbuf = gtk_image_.get_pixbuf();
  std::string filename = std::string("./debug/") + std::to_string(CurTimestampMicrosecond()) + std::string(".jpg");
  pixbuf->save(filename, "jpeg");

運行一段時間后,窗口不再刷新圖像,但圖像仍然正確保存。

編輯於 2019-02-28

// The initialization code
gtk_main_.reset(new Gtk::Main(argc, argv));
ctrl_window_.reset(new CtrlWindow(screen, ctrl_rect)); // inherited from Gtk::Window
thread_ = std::thread([this]() {
  Gtk::Main::run(*ctrl_window_);
}

看起來g_timeout_addg_idle_add都可能由於其他事件源的處理而延遲,因此在需要精確計時的上下文中不是最佳選擇,例如在幀更新之前將圖像繪制到屏幕上。 我注意到在 2D 圖形上下文中使用g_timeout_add完全凍結應用程序,如果它無法以指定的 fps 加載幀。

gtk_widget_add_callback()可能更適合您的需求,因為它會以應用程序最快的速度繪制緩沖區,而不會掛起,基本上為您完成雜亂的同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM