diff options
| -rw-r--r-- | src/DataImage.H | 3 | ||||
| -rw-r--r-- | src/DataImage.cxx | 46 | 
2 files changed, 49 insertions, 0 deletions
| diff --git a/src/DataImage.H b/src/DataImage.H index abeb4f5..99910e5 100644 --- a/src/DataImage.H +++ b/src/DataImage.H @@ -32,6 +32,9 @@ class DataImage : Fl_Widget {  		~DataImage();  		int set_pixel(nt x, int y, char r, char g, char b); + +		static int get_pixel(Fl_RGB_Image *img, int x, int y, +			char *r, char *g, char *b);  };  #endif diff --git a/src/DataImage.cxx b/src/DataImage.cxx index 83881ff..0775068 100644 --- a/src/DataImage.cxx +++ b/src/DataImage.cxx @@ -39,3 +39,49 @@ DataImage::~DataImage() {  int  DataImage::set_pixel(int x, int y, char r, char g, char b) {  } + +static int +DataImage::get_pixel(Fl_RGB_Image *img, int x, int y, +                     char *r, char *g, char *b) { +	if ( img->d() == 0 ) { +		return 1; +	} + +	if (x < 0 || x >=img->w() || y < 0 || y >= img->h()) { +		return 1; +	} + +	long index = (y * img->w() * img->d()) + (x * img->d()); // X/Y -> buf index   +	switch ( img->count() ) { +		case 1: {                                            // bitmap +				const char *buf = img->data()[0]; +				switch ( img->d() ) { +					case 1: {                                    // 8bit +							*r = *g = *b = *(buf+index); +							break; +						} +					case 3:                                      // 24bit +						*r = *(buf+index+0); +						*g = *(buf+index+1); +						*b = *(buf+index+2); +						break; +					default:                                     // ?? +						printf("Not supported: chans=%d\n", img->d()); +						return 1; +                    } +				break; +			} +		default:                                             // ?? pixmap, bit vals +			printf("Not supported: count=%d\n", img->count()); +			exit(1); +	} + +	return 0; +} +     + + + + + + | 
