diff options
| -rw-r--r-- | FL/fl_draw.H | 1 | ||||
| -rw-r--r-- | src/fl_read_image.cxx | 19 |
2 files changed, 20 insertions, 0 deletions
diff --git a/FL/fl_draw.H b/FL/fl_draw.H index f1a867071..3805190b3 100644 --- a/FL/fl_draw.H +++ b/FL/fl_draw.H @@ -794,6 +794,7 @@ inline void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int inline char fl_can_do_alpha_blending() {return Fl_Graphics_Driver::default_driver().can_do_alpha_blending();} FL_EXPORT uchar *fl_read_image(uchar *p,int X,int Y,int W,int H,int alpha=0); +FL_EXPORT Fl_RGB_Image *fl_capture_window_part(Fl_Window *win, int x, int y, int w, int h); // pixmaps: /** diff --git a/src/fl_read_image.cxx b/src/fl_read_image.cxx index 522d085c3..3498b03b6 100644 --- a/src/fl_read_image.cxx +++ b/src/fl_read_image.cxx @@ -36,6 +36,8 @@ The \p alpha parameter controls whether an alpha channel is created and the value that is placed in the alpha channel. If 0, no alpha channel is generated. + + \see fl_capture_window_part() */ uchar *fl_read_image(uchar *p, int X, int Y, int w, int h, int alpha) { uchar *image_data = NULL; @@ -88,6 +90,23 @@ uchar *fl_read_image(uchar *p, int X, int Y, int w, int h, int alpha) { return image_data; } +/** Captures the content of a rectangular zone of a mapped window. + \param win a mapped Fl_Window (derived types including Fl_Gl_Window are also possible) + \param x,y,w,h window area to be captured. Intersecting sub-windows are captured too. + \return The captured pixels as an Fl_RGB_Image. The raw and + drawing sizes of the image can differ. Returns NULL when capture was not successful. + The image depth may differ between platforms. + \version 1.4 +*/ +Fl_RGB_Image *fl_capture_window_part(Fl_Window *win, int x, int y, int w, int h) +{ + Fl_RGB_Image *rgb = NULL; + if (win->shown()) { + rgb = Fl_Screen_Driver::traverse_to_gl_subwindows(win, x, y, w, h, NULL); + if (rgb) rgb->scale(w, h, 0, 1); + } + return rgb; +} // // End of "$Id$". // |
