xref: /csrg-svn/old/lib2648/aminmax.c (revision 18798)
111459Sralph /*
2*18798Sdist  * Copyright (c) 1980 Regents of the University of California.
3*18798Sdist  * All rights reserved.  The Berkeley software License Agreement
4*18798Sdist  * specifies the terms and conditions for redistribution.
5*18798Sdist  */
6*18798Sdist 
7*18798Sdist #ifndef lint
8*18798Sdist static char sccsid[] = "@(#)aminmax.c	5.1 (Berkeley) 04/26/85";
9*18798Sdist #endif not lint
10*18798Sdist 
11*18798Sdist /*
1211459Sralph  * aminmax: find the 4 edges of the glyph within a window.
1311459Sralph  * This version is approximate, in that it may include some
1411459Sralph  * blank areas.  But it's much faster because it doesn't have
1511459Sralph  * to call mat over and over.
1611459Sralph  */
1711459Sralph 
1811459Sralph #include "bit.h"
1911459Sralph 
aminmax(g,nrow,ncol,rmin,cmin,rmax,cmax)2011459Sralph aminmax(g, nrow, ncol, rmin, cmin, rmax, cmax)
2111459Sralph bitmat g;
2211459Sralph int nrow, ncol;
2311459Sralph int *rmin, *cmin, *rmax, *cmax;
2411459Sralph {
2511459Sralph 	register int i, j;
2611459Sralph 	register int nc = (ncol+7)>>3;
2711459Sralph 	register int r1, r2, c1, c2;
2811459Sralph 
2911459Sralph 	r1 = nrow; c1 = nc; r2 = c2 = 0;
3011459Sralph 	for (i=0; i<nrow; i++)
3111459Sralph 		for (j=0; j<nc; j++)
3211459Sralph 			if (g[i*nc+j]) {
3311459Sralph 				r1 = min(r1, i);
3411459Sralph 				r2 = max(r2, i);
3511459Sralph 				c1 = min(c1, j);
3611459Sralph 				c2 = max(c2, j);
3711459Sralph 			}
3811459Sralph 	if (r2 < r1) {
3911459Sralph 		/* empty glyph! */
4011459Sralph 		r1 = c1 = r2 = c2 = 1;
4111459Sralph 	}
4211459Sralph 	*rmin = r1; *rmax = r2;
4311459Sralph 	*cmin = 8*c1; *cmax = 8*c2+7;
4411459Sralph }
45