// assumes coordinates are in range static RGB ii_averageColorOfArea(IntegralImage img, int x1, int y1, int x2, int y2) { if (img == null) null; int area = (x2-x1)*(y2-y1); int r = integralImage_sumRect(img, x1, y1, x2, y2, 0)/area; int g = integralImage_sumRect(img, x1, y1, x2, y2, 1)/area; int b = integralImage_sumRect(img, x1, y1, x2, y2, 2)/area; ret RGB(rgbInt(r, g, b)); } static RGB ii_averageColorOfArea(IntegralImage img, Rect r) { ret r == null ? null : ii_averageColorOfArea(img, r.x, r.y, r.x2(), r.y2()); } // later TODO: sub-pixel accuracy static RGB ii_averageColorOfArea(IntegralImage img, DoubleRect r) { ret ii_averageColorOfArea(img, toRect(r)); }