Here you can find the source of rgb2grayscaleA(int[] rgb)
public static byte[] rgb2grayscaleA(int[] rgb)
//package com.java2s; /**/*w w w . jav a 2s . c om*/ * 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[] rgb2grayscaleA(int[] rgb) { // We need to double the array length because of the alpha channel byte[] grayscale = new byte[rgb.length << 1]; for (int i = 0, j = 0; i < rgb.length; i++) { grayscale[j++] = (byte) (((rgb[i] >> 16) & 0xff) * 0.2126 + ((rgb[i] >> 8) & 0xff) * 0.7152 + (rgb[i] & 0xff) * 0.0722); grayscale[j++] = (byte) ((rgb[i] >> 24) & 0xff); } return grayscale; } }