|
From: <mor...@us...> - 2008-04-11 18:29:32
|
Revision: 100
http://personalrobots.svn.sourceforge.net/personalrobots/?rev=100&view=rev
Author: morgan_quigley
Date: 2008-04-11 11:29:37 -0700 (Fri, 11 Apr 2008)
Log Message:
-----------
tweaks to the image_viewer program so that pressing <enter> saves the current image (priceless for taking checkerboard calibration photos)
Modified Paths:
--------------
pkg/trunk/image_viewer/src/image_viewer/image_viewer.cpp
Modified: pkg/trunk/image_viewer/src/image_viewer/image_viewer.cpp
===================================================================
--- pkg/trunk/image_viewer/src/image_viewer/image_viewer.cpp 2008-04-11 17:55:41 UTC (rev 99)
+++ pkg/trunk/image_viewer/src/image_viewer/image_viewer.cpp 2008-04-11 18:29:37 UTC (rev 100)
@@ -37,8 +37,11 @@
FlowImage *image;
ImageCodec<FlowImage> *codec;
SDL_Surface *screen, *blit_prep;
+ bool save_next_image;
+ int save_number;
- ImageViewer() : ROS_Slave(), blit_prep(NULL)
+ ImageViewer() : ROS_Slave(), blit_prep(NULL),
+ save_next_image(false), save_number(1)
{
register_sink(image = new FlowImage("image"),
ROS_CALLBACK(ImageViewer, image_cb));
@@ -51,8 +54,31 @@
screen = SDL_SetVideoMode(320, 240, 24, 0);
return (screen ? true : false);
}
+ void request_save_image() { save_next_image = true; }
+ void save_image()
+ {
+ save_next_image = false;
+ if (image->compression != string("jpeg"))
+ printf("I am only smart enough to save a jpeg image\n");
+ else
+ {
+ char fnamebuf[100];
+ sprintf(fnamebuf, "image%04d.jpg", save_number++);
+ FILE *f = fopen(fnamebuf, "wb");
+ if (!f)
+ {
+ printf("couldn't open [%s]\n", fnamebuf);
+ return; // bummer
+ }
+ fwrite(image->data, 1, image->get_data_size(), f);
+ fclose(f);
+ printf("saved %s\n", fnamebuf);
+ }
+ }
void image_cb()
{
+ if (save_next_image)
+ save_image();
if (!screen)
return; // paranoia. shouldn't happen. we should have bailed by now.
if (screen->h != image->height || screen->w != image->width)
@@ -124,7 +150,11 @@
exit(1);
}
while (v.happy())
- usleep(1000000);
+ {
+ getc(stdin);
+ v.save_next_image = true;
+ //usleep(1000000);
+ }
return 0;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|