Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <gtk/gtk.h>
- #include "opencv.hpp"
- int main( int argc, char **argv );
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- return main (__argc, __argv);
- }
- /***********************************
- GLOBAL VARIABLES
- ***********************************/
- gboolean popup = FALSE;
- /***********************************
- FUNCTION DECLARATIONS
- ***********************************/
- GdkPixbuf* convertOpenCvToGtk(IplImage *image); //Converts an OpenCV image to a GDK pixel buffer
- /***********************************
- EVENT HANDLERS
- ***********************************/
- void
- popupDestroyed (GtkWindow *window, gpointer user_data)
- {
- GtkWidget **Widgets;
- Widgets = (GtkWidget**)user_data;
- gtk_widget_destroy (Widgets[0]);
- gtk_widget_destroy (Widgets[1]);
- gtk_widget_destroy (GTK_WIDGET (window));
- popup = FALSE;
- }
- void
- buttonPopup_clicked (GtkButton *button, gpointer user_data)
- {
- GtkEntry *entry;
- entry = GTK_ENTRY (user_data);
- if(!popup)
- {
- IplImage *cvImage;
- cvImage = cvLoadImage(gtk_entry_get_text(entry));
- if(cvImage == NULL)
- {
- GtkWidget *dialog;
- dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Error loading image \"%s\"", gtk_entry_get_text (entry));
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- return;
- }
- GdkPixbuf *pix;
- pix = convertOpenCvToGtk(cvImage);
- GtkWidget *image;
- image = gtk_image_new_from_pixbuf (pix);
- gtk_widget_destroy (GTK_WIDGET (pix));
- GtkWidget *window;
- GtkWidget *vbox;
- GtkWidget **widgetArray = new GtkWidget*[2];
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (window), gtk_entry_get_text (entry));
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_add (GTK_CONTAINER (window), vbox);
- gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, FALSE, 0);
- widgetArray[0] = image;
- widgetArray[1] = vbox;
- g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (popupDestroyed), (gpointer)widgetArray);
- gtk_widget_show_all (window);
- popup = TRUE;
- }
- }
- /***********************************
- ENTRY POINT
- ***********************************/
- int main (int argc, char **argv)
- {
- //Variable declarations
- GtkWidget *window;
- GtkWidget *vbox;
- GtkWidget *hbox;
- GtkWidget *buttonPopup;
- GtkWidget *entry;
- //Call this before setting up widgets, etc
- gtk_init (&argc, &argv);
- //Variable initializations
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (window), "Main Window");
- gtk_window_set_default_size (GTK_WINDOW (window), 300, 100);
- vbox = gtk_vbox_new (TRUE, 6);
- hbox = gtk_hbox_new (TRUE, 6);
- buttonPopup = gtk_button_new_with_label ("Show Image");
- entry = gtk_entry_new ();
- gtk_entry_set_text (GTK_ENTRY (entry), "picture.png");
- //Event handler hookups
- g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
- g_signal_connect (G_OBJECT (buttonPopup), "clicked", G_CALLBACK (buttonPopup_clicked), (gpointer)entry);
- //GUI assemblage
- gtk_container_add (GTK_CONTAINER (window), vbox);
- gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 6);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox), buttonPopup, FALSE, FALSE, 6);
- //Show the GUI elements
- gtk_widget_show_all (window);
- //Call this AFTER setting up widgets etc
- gtk_main ();
- return 0;
- }
- /***********************************
- FUNCTION DEFINITIONS
- ***********************************/
- GdkPixbuf* convertOpenCvToGtk(IplImage *image)
- {
- IplImage *gtkMask;
- //GtkWidget *gtkImg;
- GdkPixbuf *pix;
- gtkMask = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels);//Create another image with the same stuff
- cvCvtColor(image, gtkMask, CV_BGR2RGB);//Copy the IplImage to RGB format
- //Copy the IplImage data to a GdkPixbuf:
- pix = gdk_pixbuf_new_from_data (
- (guchar*)gtkMask->imageData,//Raw image data
- GDK_COLORSPACE_RGB, //Colorspace
- FALSE, //Has alpha channel or not
- gtkMask->depth, //Bits per pixel
- gtkMask->width, //Width of image
- gtkMask->height, //Height of image
- gtkMask->widthStep, //Row stride
- NULL, //Not sure what this is
- NULL //Not sure what this is
- );
- //gtkImg = gtk_image_new_from_pixbuf (pix);
- return pix;//Uncomment the gtkImg lines, change the return type to GtkWidget* and return gtkImg to make this return a GtkImage instead of a GdkPixbuf
- }
Advertisement
Add Comment
Please, Sign In to add comment