diff options
| author | John Hawthorn <jhawthor@uvic.ca> | 2008-05-15 07:38:31 -0700 | 
|---|---|---|
| committer | John Hawthorn <jhawthor@uvic.ca> | 2008-05-15 07:38:31 -0700 | 
| commit | ae7756334d43d545e7e18694b9d989fb849ed142 (patch) | |
| tree | d03fb3b92a2c562ea0ac02ea0c16a1f6b2430ad7 /src | |
| parent | 75f30a4410f698670efa7190a8c95f4ec0e1addb (diff) | |
| download | mirror-meh-ae7756334d43d545e7e18694b9d989fb849ed142.tar.gz mirror-meh-ae7756334d43d545e7e18694b9d989fb849ed142.tar.bz2 mirror-meh-ae7756334d43d545e7e18694b9d989fb849ed142.zip | |
black border when preserving aspect ratio
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 29 | 
1 files changed, 22 insertions, 7 deletions
| @@ -128,7 +128,10 @@ void init(){  void run(char *images[], int length){  	int i = 0;  	int bufwidth = 0, bufheight = 0; +	int xoffset = 0, yoffset = 0; +	int imagewidth = 0, imageheight = 0;  	int width = 0, height = 0; +	int fillw = 0, fillh = 0;  	XImage *img = NULL;  	unsigned char *buf = NULL;  	int redraw = 0; @@ -196,23 +199,35 @@ void run(char *images[], int length){  				printf(" %i milliseconds\n", (tv1.tv_sec - tv0.tv_sec) * 1000 + (tv1.tv_usec - tv0.tv_usec)/1000);  			}  			if(!img){ -				int w, h;  				printf("scaling & converting...");  				gettimeofday(&tv0, NULL);  				if(width * bufheight > height * bufwidth){ -					w = bufwidth * height / bufheight; -					h = height; +					imagewidth = bufwidth * height / bufheight; +					imageheight = height; +					xoffset = (width - imagewidth) / 2; +					yoffset = 0; +					fillw = xoffset; +					fillh = height; +				}else if(width * bufheight < height * bufwidth){ +					imagewidth = width; +					imageheight = bufheight * width / bufwidth; +					xoffset = 0; +					yoffset = (height - imageheight) / 2; +					fillw = width; +					fillh = yoffset;  				}else{ -					w = width; -					h = bufheight * width / bufwidth; +					xoffset = 0; +					yoffset = 0;  				} -				img = create_image_from_buffer(buf, w, h, bufwidth, bufheight); +				img = create_image_from_buffer(buf, imagewidth, imageheight, bufwidth, bufheight);  				assert(img);  				gettimeofday(&tv1, NULL);  				printf(" %i milliseconds\n", (tv1.tv_sec - tv0.tv_sec) * 1000 + (tv1.tv_usec - tv0.tv_usec)/1000);  			}  			printf("Displaying\n"); -			XPutImage(display, window, gc, img, 0, 0, 0, 0, width, height); +			XFillRectangle(display, window, gc, 0, 0, fillw, fillh); +			XPutImage(display, window, gc, img, 0, 0, xoffset, yoffset, width, height); +			XFillRectangle(display, window, gc, width - fillw, height - fillh, fillw, fillh);  			XFlush(display);  			redraw = 0;  		} | 
