示例#1
0
 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);
       }
       */
     }
   }
 }