| 2655 | } |
| 2656 | |
| 2657 | static void inRangeReduce(const uchar* src, uchar* dst, size_t len, int cn) |
| 2658 | { |
| 2659 | int k = cn % 4 ? cn % 4 : 4; |
| 2660 | size_t i, j; |
| 2661 | if( k == 1 ) |
| 2662 | for( i = j = 0; i < len; i++, j += cn ) |
| 2663 | dst[i] = src[j]; |
| 2664 | else if( k == 2 ) |
| 2665 | for( i = j = 0; i < len; i++, j += cn ) |
| 2666 | dst[i] = src[j] & src[j+1]; |
| 2667 | else if( k == 3 ) |
| 2668 | for( i = j = 0; i < len; i++, j += cn ) |
| 2669 | dst[i] = src[j] & src[j+1] & src[j+2]; |
| 2670 | else |
| 2671 | for( i = j = 0; i < len; i++, j += cn ) |
| 2672 | dst[i] = src[j] & src[j+1] & src[j+2] & src[j+3]; |
| 2673 | |
| 2674 | for( ; k < cn; k += 4 ) |
| 2675 | { |
| 2676 | for( i = 0, j = k; i < len; i++, j += cn ) |
| 2677 | dst[i] &= src[j] & src[j+1] & src[j+2] & src[j+3]; |
| 2678 | } |
| 2679 | } |
| 2680 | |
| 2681 | typedef void (*InRangeFunc)( const uchar* src1, size_t step1, const uchar* src2, size_t step2, |
| 2682 | const uchar* src3, size_t step3, uchar* dst, size_t step, Size sz ); |