sclass BWImageHistogram { IBWImage image; // optional int[] data; // pixel count for each brightness from 0 to 255 int nPixels; // sum of pixel count *(BufferedImage image) { this(BWImage(image)); } *(BWImage *image) { nPixels = area(image); data = bwImageHistogramArray(image); } toString { ret "BWImageHistogram of " + nPixels(nPixels) + (image == null ? "" : appendBracketed(str_px(image))); } int[] getArray() { ret data; } int medianBrightness() { int threshold = (nPixels+1)/2, sum = 0; for i to 256: { sum += data[i]; if (sum > threshold) ret i; } ret 255; } }