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<IntRange> streaks = shiftIntRanges(x1, genericStreaks(w, x -> region.contains(x1+x, y)));
      
      xData.addAll(intRangesToIntArray_startAndLength(streaks));
    }
    
    gsi.xData = xData.toArray();
    ret gsi;
  }
}