Я разместил это на форуме Pi, но единственный ответ, который я получил, - то, что я отправил это не в том месте.
Размещение на форуме Pi
Мне удалось создать программу, которая будет отображать некоторые кнопки и изображение. Теперь я хотел бы обновить изображение при нажатии кнопки. Как мне это сделать?
Вот что у меня пока есть, все работает, но отсутствует код для обновления отображаемого изображения. 3-секундная задержка перед camrea.grab отсутствует в этом коде, но была добавлена в код, который я использую.
#include <iostream>
#include <raspicam/raspicam.h>
#include <wiringPi.h>
#include <gtk/gtk.h>
#include <fstream>
#include <vector>
#include <unistd.h>
using namespace std;
void Capture_Image(void){
//camera setup
raspicam::RaspiCam camera; //Camera object
if (!camera.open())
{
cerr << "Could not open the camera" << endl;
//return 1;
}
camera.grab();
std::vector<unsigned char> buf;
buf.resize(camera.getImageTypeSize(raspicam::RASPICAM_FORMAT_RGB));
camera.retrieve(buf.data(), raspicam::RASPICAM_FORMAT_RGB);
std::ofstream outFile("/home/pi/s.jpg", std::ios::binary);
outFile << "P6\n" << camera.getWidth() << " " << camera.getHeight() << " 255\n";
outFile.write((char*)buf.data(), buf.size());
cout << "Image saved to output.ppm" << endl;
}
int main(int argc, char **argv)
{
wiringPiSetup();
gtk_init (&argc, &argv);
//Main Box
GtkWidget *mainBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
gtk_container_add (GTK_CONTAINER (win), mainBox);
//camera image container
GtkWidget *cameraBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
gtk_container_add (GTK_CONTAINER (mainBox), cameraBox);
GtkWidget *cameraView = gtk_image_new_from_file("/home/pi/s.jpg");
gtk_box_pack_start (GTK_BOX (cameraBox), cameraView, TRUE, TRUE, 0);
//resize image
GdkPixbuf *pixBuf = gtk_image_get_pixbuf(GTK_IMAGE(cameraView));
pixBuf = gdk_pixbuf_scale_simple(pixBuf, 300,200,GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(GTK_IMAGE(cameraView),pixBuf);
//image capture button
GtkWidget *imageCapture = gtk_button_new_with_label ("Image Capture");
g_signal_connect (imageCapture, "clicked", G_CALLBACK (Capture_Image), NULL);
gtk_box_pack_start (GTK_BOX (cameraBox), imageCapture, TRUE, TRUE, 0);
//show the new window
gtk_widget_show_all (win);
//Start the GTK main loop
gtk_main ();
return 0;
}