xref: /csrg-svn/old/lib2648/aminmax.c (revision 11459)
1*11459Sralph /*	aminmax.c	4.1	83/03/09	*/
2*11459Sralph /*
3*11459Sralph  * aminmax: find the 4 edges of the glyph within a window.
4*11459Sralph  * This version is approximate, in that it may include some
5*11459Sralph  * blank areas.  But it's much faster because it doesn't have
6*11459Sralph  * to call mat over and over.
7*11459Sralph  */
8*11459Sralph 
9*11459Sralph #include "bit.h"
10*11459Sralph 
11*11459Sralph aminmax(g, nrow, ncol, rmin, cmin, rmax, cmax)
12*11459Sralph bitmat g;
13*11459Sralph int nrow, ncol;
14*11459Sralph int *rmin, *cmin, *rmax, *cmax;
15*11459Sralph {
16*11459Sralph 	register int i, j;
17*11459Sralph 	register int nc = (ncol+7)>>3;
18*11459Sralph 	register int r1, r2, c1, c2;
19*11459Sralph 
20*11459Sralph 	r1 = nrow; c1 = nc; r2 = c2 = 0;
21*11459Sralph 	for (i=0; i<nrow; i++)
22*11459Sralph 		for (j=0; j<nc; j++)
23*11459Sralph 			if (g[i*nc+j]) {
24*11459Sralph 				r1 = min(r1, i);
25*11459Sralph 				r2 = max(r2, i);
26*11459Sralph 				c1 = min(c1, j);
27*11459Sralph 				c2 = max(c2, j);
28*11459Sralph 			}
29*11459Sralph 	if (r2 < r1) {
30*11459Sralph 		/* empty glyph! */
31*11459Sralph 		r1 = c1 = r2 = c2 = 1;
32*11459Sralph 	}
33*11459Sralph 	*rmin = r1; *rmax = r2;
34*11459Sralph 	*cmin = 8*c1; *cmax = 8*c2+7;
35*11459Sralph }
36