static RGBImage toGrayScale(RGBImage img, int bits) { int steps = 1 << bits; int w = img.getWidth(), h = img.getHeight(); RGBImage bw = new RGBImage(w, h); for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) { float b = img.getPixel(x, y).getBrightness(); int bx = (int) (b*steps); double b2 = Math.min(1f, Math.max(0f, bx/(float) steps)); bw.setPixel(x, y, new RGB(b2)); } return bw; }