Here you can find the source of rgb2bilevel(int[] rgb)
public static byte[] rgb2bilevel(int[] rgb)
//package com.java2s; /**/* w w w. jav a2 s. com*/ * Copyright (c) 2014-2015 by Wen Yu. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Any modifications to this file must keep this entire header intact. * * Change History - most recent changes go on top of previous changes * * IMGUtils.java * * Who Date Description * ==== ========= ============================================================== * WY 03Feb2015 Added createThumbnail() to create a thumbnail from an image * WY 27Jan2015 Added createThumbnail8BIM() to wrap a BufferedImage to _8BIM * WY 22Jan2015 Factored out guessImageType(byte[]) * WY 24Dec2014 Rename CMYK2RGB() to iccp2rgbRaster() * WY 17Dec2014 Bug fix for rgb2bilevelDither() to bypass transparent pixels * WY 03Dec2014 Bug fix for getRGB() to fall back to BufferedImage.getRGB() * WY 26Nov2014 Changed rgb2bilevel() to take into account transparency * WY 03Nov2014 Added CMYK2RGB() to convert CMYK raster to RGB raster * WY 22Sep2014 Added guessImageType() to auto detect image type * WY 13Aug2014 Added RGB2YCCK_Inverted() to support YCCK JPEG * WY 05May2014 Added getRGB() and getRGB2() to replace BufferedImage.getRGB() */ public class Main { public static byte[] rgb2bilevel(int[] rgb) { // RGB to gray-scale byte[] pixels = new byte[rgb.length]; int sum = 0; for (int i = 0; i < rgb.length; i++) { if ((rgb[i] >>> 24) < 0x80) pixels[i] = (byte) 0xff; // Dealing with transparency color else pixels[i] = (byte) (((rgb[i] >> 16) & 0xff) * 0.2126 + ((rgb[i] >> 8) & 0xff) * 0.7152 + (rgb[i] & 0xff) * 0.0722); sum += (pixels[i] & 0xff); } // Calculate threshold int threshold = (sum / pixels.length); // Reduce gray-scale to BW - we assume PhotoMetric.WHITE_IS_ZERO for (int l = 0; l < pixels.length; l++) { if ((pixels[l] & 0xff) <= threshold) { pixels[l] = 1; // Black } else { pixels[l] = 0; // White } } return pixels; } }