question: protected void dilate ( boolean isInverted ) { int currIdx = 0 ; int maxIdx = pixels . length ; int [ ] out = new int [ maxIdx ] ; if ( ! isInverted ) { while ( currIdx < maxIdx ) { int currRowIdx = currIdx ; int maxRowIdx = currIdx + width ; while ( currIdx < maxRowIdx ) { int colOrig , colOut ; colOrig = colOut = pixels [ currIdx ] ; int idxLeft = currIdx - 1 ; int idxRight = currIdx + 1 ; int idxUp = currIdx - width ; int idxDown = currIdx + width ; if ( idxLeft < currRowIdx ) idxLeft = currIdx ; if ( idxRight >= maxRowIdx ) idxRight = currIdx ; if ( idxUp < 0 ) idxUp = 0 ; if ( idxDown >= maxIdx ) idxDown = currIdx ; int colUp = pixels [ idxUp ] ; int colLeft = pixels [ idxLeft ] ; int colDown = pixels [ idxDown ] ; int colRight = pixels [ idxRight ] ; int currLum = 77 * ( colOrig > > 16 & 0xff ) + 151 * ( colOrig > > 8 & 0xff ) + 28 * ( colOrig & 0xff ) ; int lumLeft = 77 * ( colLeft > > 16 & 0xff ) + 151 * ( colLeft > > 8 & 0xff ) + 28 * ( colLeft & 0xff ) ; int lumRight = 77 * ( colRight > > 16 & 0xff ) + 151 * ( colRight > > 8 & 0xff ) + 28 * ( colRight & 0xff ) ; int lumUp = 77 * ( colUp > > 16 & 0xff ) + 151 * ( colUp > > 8 & 0xff ) + 28 * ( colUp & 0xff ) ; int lumDown = 77 * ( colDown > > 16 & 0xff ) + 151 * ( colDown > > 8 & 0xff ) + 28 * ( colDown & 0xff ) ; if ( lumLeft > currLum ) { colOut = colLeft ; currLum = lumLeft ; } if ( lumRight > currLum ) { colOut = colRight ; currLum = lumRight ; } if ( lumUp > currLum ) { colOut = colUp ; currLum = lumUp ; } if ( lumDown > currLum ) { colOut = colDown ; currLum = lumDown ; } out [ currIdx ++ ] = colOut ; } } } else { while ( currIdx < maxIdx ) { int currRowIdx = currIdx ; int maxRowIdx = currIdx + width ; while ( currIdx < maxRowIdx ) { int colOrig , colOut ; colOrig = colOut = pixels [ currIdx ] ; int idxLeft = currIdx - 1 ; int idxRight = currIdx + 1 ; int idxUp = currIdx - width ; int idxDown = currIdx + width ; if ( idxLeft < currRowIdx ) idxLeft = currIdx ; if ( idxRight >= maxRowIdx ) idxRight = currIdx ; if ( idxUp < 0 ) idxUp = 0 ; if ( idxDown >= maxIdx ) idxDown = currIdx ; int colUp = pixels [ idxUp ] ; int colLeft = pixels [ idxLeft ] ; int colDown = pixels [ idxDown ] ; int colRight = pixels [ idxRight ] ; int currLum = 77 * ( colOrig > > 16 & 0xff ) + 151 * ( colOrig > > 8 & 0xff ) + 28 * ( colOrig & 0xff ) ; int lumLeft = 77 * ( colLeft > > 16 & 0xff ) + 151 * ( colLeft > > 8 & 0xff ) + 28 * ( colLeft & 0xff ) ; int lumRight = 77 * ( colRight > > 16 & 0xff ) + 151 * ( colRight > > 8 & 0xff ) + 28 * ( colRight & 0xff ) ; int lumUp = 77 * ( colUp > > 16 & 0xff ) + 151 * ( colUp > > 8 & 0xff ) + 28 * ( colUp & 0xff ) ; int lumDown = 77 * ( colDown > > 16 & 0xff ) + 151 * ( colDown > > 8 & 0xff ) + 28 * ( colDown & 0xff ) ; if ( lumLeft < currLum ) { colOut = colLeft ; currLum = lumLeft ; } if ( lumRight < currLum ) { colOut = colRight ; currLum = lumRight ; } if ( lumUp < currLum ) { colOut = colUp ; currLum = lumUp ; } if ( lumDown < currLum ) { colOut = colDown ; currLum = lumDown ; } out [ currIdx ++ ] = colOut ; } } } System . arraycopy ( out , 0 , pixels , 0 , maxIdx ) ; }
target:  Generic dilate/erode filter using luminance values as decision factor. [toxi 050728]