import java.awt.image.BufferedImage; import java.awt.image.ByteLookupTable; import java.awt.image.LookupOp; import java.util.Arrays; public class Test { public static void main(final String[] args) { final byte[] lutArrayG = new byte[256]; final byte[] lutArrayR = new byte[256]; final byte[] lutArrayA = new byte[256]; final byte[] lutArrayB = new byte[256]; Arrays.fill(lutArrayG, (byte) 1); Arrays.fill(lutArrayR, (byte) 2); Arrays.fill(lutArrayA, (byte) 3); Arrays.fill(lutArrayB, (byte) 4); final byte[][] lutArrays = new byte[4][]; // what is the correct order to use? this one... lutArrays[0] = lutArrayG; lutArrays[1] = lutArrayR; lutArrays[2] = lutArrayA; lutArrays[3] = lutArrayB; // or this one... //lutArrays[1] = lutArrayG; //lutArrays[0] = lutArrayR; //lutArrays[3] = lutArrayA; //lutArrays[2] = lutArrayB; final ByteLookupTable lut = new ByteLookupTable(0, lutArrays); final LookupOp lutOp = new LookupOp(lut, null); final BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); final BufferedImage imageFiltered = lutOp.filter(image, null); final int value = imageFiltered.getRGB(0, 0); System.out.println(makeNiceBinaryString(value)); } public static String makeNiceBinaryString(final int value) { final StringBuffer sb = new StringBuffer(String.format("%32s", Integer.toBinaryString(value)).replace(' ', '0')); sb.insert(sb.length() - 32, " "); sb.insert(sb.length() - 24, " "); sb.insert(sb.length() - 16, " "); sb.insert(sb.length() - 8, " "); return sb.toString(); } }