protected static void recordPattern ( BitArray row , int start , int [ ] counters ) throws NotFoundException { int numCounters = counters . length ; Arrays . fill ( counters , 0 , numCounters , 0 ) ; int end = row . getSize ( ) ; if ( start >= end ) { throw NotFoundException . getNotFoundInstance ( ) ; } boolean isWhite = ! row . get ( start ) ; int counterPosition = 0 ; int i = start ; while ( i < end ) { if ( row . get ( i ) != isWhite ) { counters [ counterPosition ] ++ ; } else { if ( ++ counterPosition == numCounters ) { break ; } else { counters [ counterPosition ] = 1 ; isWhite = ! isWhite ; } } i ++ ; } // If we read fully the last section of pixels and filled up our counters -- or filled // the last counter but ran off the side of the image, OK. Otherwise, a problem. if ( ! ( counterPosition == numCounters || ( counterPosition == numCounters - 1 && i == end ) ) ) { throw NotFoundException . getNotFoundInstance ( ) ; } }
Records the size of successive runs of white and black pixels in a row starting at a given point . The values are recorded in the given array and the number of runs recorded is equal to the size of the array . If the row starts on a white pixel at the given start point then the first count recorded is the run of white pixels starting from that point ; likewise it is the count of a run of black pixels if the row begin on a black pixels at that point .