public void run() { if (sur == null) { sur = new int[_len - 1]; } int dim = _len; int offset = (dim - 1) / 2; offset = 1; TroveSelector sel = (TroveSelector) selector(); rows[0] = new int[b1.getWidth()]; rows[1] = new int[b1.getWidth()]; rows[2] = new int[b1.getWidth()]; int ys = _y1 - 1; if (ys == -1) { ys = b1.getHeight() - 1; } b1.getRow(rows[1], ys, 0); b1.getRow(rows[2], _y1, 0); for (int y = _y1; y < _y2; y++) { int[] tmp = rows[0]; rows[0] = rows[1]; rows[1] = rows[2]; rows[2] = tmp; if (y + 1 != b1.getHeight()) { b1.getRow(rows[2], y + 1, 0); } for (int x = _x1; x < _x2; x++) { long lastKey = -1; int lastN = -1; int idx = 0; int dx = x - offset; int dy = y - offset; long key; if (dx >= 0 && dy >= 0 && x + 1 < b1.getWidth() && y + 1 < b1.getHeight()) { key = sel.inputKey(rows, x - 1); } else { for (int j = y - 1; j <= y + 1; j++) { for (int i = x - 1; i <= x + 1; i++) { sur[idx++] = get(b1, i, j); } } key = sel.inputKey(sur, 0); } int n; if (key == lastKey) { n = lastN; } else { n = sel.next(key); } lastKey = key; lastN = n; int curColor = b2.get(x, y); if (n != -1) { if (_colors[n] != background()) { // System.err.println("NONBGR FOR: "+Arrays.toString(sur)); // System.err.println("BGR: "+background()); // ((TroveSelector)sel).longFind(sur); } b2.set(x, y, _colors[n]); if (_interceptor != null) { _interceptor.set(x, y, _colors[n]); } // b2.set(x, y, n); // System.err.print(" "+n); } else { if (curColor == 0) { b2.set(x, y, background()); } // System.err.println("no value for "+Arrays.toString(sur)+" for "+sel.toString()); // ((TroveSelector)sel).longFind(sur); // throw new Error(); } /* int dx = x - offset; int dy = y - offset; if(dx>=0&&dy>=0&&dx+dim<b1.getWidth()&&dy+dim<b1.getHeight()) { b1.getBlock(sur, dx, dy, _len); } int n = sel.next(sur, 0); if(n!=-1) { b2.set(x, y, n); } */ } } }