sinterface IBWImage extends MakesBufferedImage, IRGBImage { float getFloatPixel(int x, int y); // usually between 0 and 1 default int getInt(int x, int y) { ret iround(getFloatPixel(x, y)*255f); } // implementing IRGBImage default int getIntPixel(int x, int y) { ret rgbIntFromGrayscale(getInt(x, y)); } default float getFloatPixel(Pt p) { ret getFloatPixel(p.x, p.y); } public default BufferedImage getBufferedImage() { ret grayImageFromIBWImage(this); } default BWImage toBWImage() { ret this instanceof BWImage ? (BWImage) this : iBWImageToBWImage(this); } }