static BWImage decolorizeImage(Decolorizer decolorizer, BufferedImage image) { if (image == null) null; var gp = grabbableIntPixels_fastOrSlow(image); if (gp == null) null; var ping = pingSource(); int[] image = gp.data; int w = gp.w, h = gp.h; int scanlineExtra = gp.scanlineStride-w; int iImage = gp.offset, i = 0; byte[] image2 = new[w*h]; for y to h: { for x to w: { int packed = image[iImage++]; int brightness = decolorizer.toGrayScale(packed); image2[i++] = (byte) brightness; } iImage += scanlineExtra; ping?!; } ret BWImage(w, h, image2); }