srecord noeq RegionToGSI(IPixelSet region) extends Meta { Color color; gettable GSI gsi; GSI get() { if (region == null) null; if (region cast IImageRegion) gsi.color(region.color()); Rect r = region.bounds(); int x1 = r.x1(), y1 = r.y1(); int y2 = r.y2(), w = r.w, h = y2-y1; gsi = new GSI; gsi.y1 = y1; gsi.rowStarts = new int[h]; new IntBuffer xData; for (int y = y1; y < y2; y++) { reMutable y; gsi.rowStarts[y-y1] = l(xData); L streaks = shiftIntRanges(x1, genericStreaks(w, x -> region.contains(x1+x, y))); xData.addAll(intRangesToIntArray_startAndLength(streaks)); } gsi.xData = xData.toArray(); ret gsi; } }