diff options
Diffstat (limited to 'awt/java/awt/image/DirectColorModel.java')
-rw-r--r-- | awt/java/awt/image/DirectColorModel.java | 889 |
1 files changed, 0 insertions, 889 deletions
diff --git a/awt/java/awt/image/DirectColorModel.java b/awt/java/awt/image/DirectColorModel.java deleted file mode 100644 index 700eb7a..0000000 --- a/awt/java/awt/image/DirectColorModel.java +++ /dev/null @@ -1,889 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @author Igor V. Stolyarov - * @version $Revision$ - */ - -package java.awt.image; - -import java.awt.color.ColorSpace; -import java.awt.Transparency; -import java.util.Arrays; - -import org.apache.harmony.awt.gl.color.LUTColorConverter; -import org.apache.harmony.awt.internal.nls.Messages; - -/** - * The Class DirectColorModel represents a standard (packed) RGB color model - * with additional support for converting between sRGB color space and 8 or 16 - * bit linear RGB color space using lookup tables. - * - * @since Android 1.0 - */ -public class DirectColorModel extends PackedColorModel { - - /** - * The from_ linea r_ rg b_ lut. - */ - private byte from_LINEAR_RGB_LUT[]; // Lookup table for conversion from - - // Linear RGB Color Space into sRGB - - /** - * The to_ linea r_8 rg b_ lut. - */ - private byte to_LINEAR_8RGB_LUT[]; // Lookup table for conversion from - - // sRGB Color Space into Linear RGB - // 8 bit - - /** - * The to_ linea r_16 rg b_ lut. - */ - private short to_LINEAR_16RGB_LUT[]; // Lookup table for conversion from - - // sRGB Color Space into Linear RGB - // 16 bit - - /** - * The alpha lut. - */ - private byte alphaLUT[]; // Lookup table for scale alpha value - - /** - * The color lu ts. - */ - private byte colorLUTs[][]; // Lookup tables for scale color values - - /** - * The is_s rgb. - */ - private boolean is_sRGB; // ColorModel has sRGB ColorSpace - - /** - * The is_ linea r_ rgb. - */ - private boolean is_LINEAR_RGB; // Color Model has Linear RGB Color - - // Space - - /** - * The LINEA r_ rg b_ length. - */ - private int LINEAR_RGB_Length; // Linear RGB bit length - - /** - * The factor. - */ - private float fFactor; // Scale factor - - /** - * Instantiates a new direct color model. - * - * @param space - * the color space. - * @param bits - * the array of component masks. - * @param rmask - * the bitmask corresponding to the red band. - * @param gmask - * the bitmask corresponding to the green band. - * @param bmask - * the bitmask corresponding to the blue band. - * @param amask - * the bitmask corresponding to the alpha band. - * @param isAlphaPremultiplied - * whether the alpha is pre-multiplied in this color model. - * @param transferType - * the transfer type (primitive java type to use for the - * components). - * @throws IllegalArgumentException - * if the number of bits in the combined bitmasks for the color - * bands is less than one or greater than 32. - */ - public DirectColorModel(ColorSpace space, int bits, int rmask, int gmask, int bmask, int amask, - boolean isAlphaPremultiplied, int transferType) { - - super(space, bits, rmask, gmask, bmask, amask, isAlphaPremultiplied, - (amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT), transferType); - - initLUTs(); - } - - /** - * Instantiates a new direct color model, determining the transfer type from - * the bits array, the transparency from the alpha mask, and the default - * color space {@link ColorSpace#CS_sRGB}. - * - * @param bits - * the array of component masks. - * @param rmask - * the bitmask corresponding to the red band. - * @param gmask - * the bitmask corresponding to the green band. - * @param bmask - * the bitmask corresponding to the blue band. - * @param amask - * the bitmask corresponding to the alpha band. - */ - public DirectColorModel(int bits, int rmask, int gmask, int bmask, int amask) { - - super(ColorSpace.getInstance(ColorSpace.CS_sRGB), bits, rmask, gmask, bmask, amask, false, - (amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT), ColorModel - .getTransferType(bits)); - - initLUTs(); - } - - /** - * Instantiates a new direct color model with no alpha channel, determining - * the transfer type from the bits array, the default color space - * {@link ColorSpace#CS_sRGB}, and with the transparency set to - * {@link Transparency#OPAQUE}. - * - * @param bits - * the array of component masks. - * @param rmask - * the bitmask corresponding to the red band. - * @param gmask - * the bitmask corresponding to the green band. - * @param bmask - * the bitmask corresponding to the blue band. - */ - public DirectColorModel(int bits, int rmask, int gmask, int bmask) { - this(bits, rmask, gmask, bmask, 0); - } - - @Override - public Object getDataElements(int components[], int offset, Object obj) { - int pixel = 0; - for (int i = 0; i < numComponents; i++) { - pixel |= (components[offset + i] << offsets[i]) & componentMasks[i]; - } - - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[]; - if (obj == null) { - ba = new byte[1]; - } else { - ba = (byte[])obj; - } - ba[0] = (byte)pixel; - obj = ba; - break; - - case DataBuffer.TYPE_USHORT: - short sa[]; - if (obj == null) { - sa = new short[1]; - } else { - sa = (short[])obj; - } - sa[0] = (short)pixel; - obj = sa; - break; - - case DataBuffer.TYPE_INT: - int ia[]; - if (obj == null) { - ia = new int[1]; - } else { - ia = (int[])obj; - } - ia[0] = pixel; - obj = ia; - break; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - - return obj; - } - - @Override - public Object getDataElements(int rgb, Object pixel) { - if (equals(ColorModel.getRGBdefault())) { - int ia[]; - if (pixel == null) { - ia = new int[1]; - } else { - ia = (int[])pixel; - } - ia[0] = rgb; - return ia; - } - - int alpha = (rgb >> 24) & 0xff; - int red = (rgb >> 16) & 0xff; - int green = (rgb >> 8) & 0xff; - int blue = rgb & 0xff; - - float comp[] = new float[numColorComponents]; - float normComp[] = null; - - if (is_sRGB || is_LINEAR_RGB) { - if (is_LINEAR_RGB) { - if (LINEAR_RGB_Length == 8) { - red = to_LINEAR_8RGB_LUT[red] & 0xff; - green = to_LINEAR_8RGB_LUT[green] & 0xff; - blue = to_LINEAR_8RGB_LUT[blue] & 0xff; - } else { - red = to_LINEAR_16RGB_LUT[red] & 0xffff; - green = to_LINEAR_16RGB_LUT[green] & 0xffff; - blue = to_LINEAR_16RGB_LUT[blue] & 0xffff; - } - } - comp[0] = red / fFactor; - comp[1] = green / fFactor; - comp[2] = blue / fFactor; - if (!hasAlpha) { - normComp = comp; - } else { - float normAlpha = alpha / 255.0f; - normComp = new float[numComponents]; - for (int i = 0; i < numColorComponents; i++) { - normComp[i] = comp[i]; - } - normComp[numColorComponents] = normAlpha; - } - } else { - comp[0] = red / fFactor; - comp[1] = green / fFactor; - comp[2] = blue / fFactor; - float rgbComp[] = cs.fromRGB(comp); - if (!hasAlpha) { - normComp = rgbComp; - } else { - float normAlpha = alpha / 255.0f; - normComp = new float[numComponents]; - for (int i = 0; i < numColorComponents; i++) { - normComp[i] = rgbComp[i]; - } - normComp[numColorComponents] = normAlpha; - } - } - - int pxl = 0; - if (hasAlpha) { - float normAlpha = normComp[numColorComponents]; - alpha = (int)(normAlpha * maxValues[numColorComponents] + 0.5f); - if (isAlphaPremultiplied) { - red = (int)(normComp[0] * normAlpha * maxValues[0] + 0.5f); - green = (int)(normComp[1] * normAlpha * maxValues[1] + 0.5f); - blue = (int)(normComp[2] * normAlpha * maxValues[2] + 0.5f); - } else { - red = (int)(normComp[0] * maxValues[0] + 0.5f); - green = (int)(normComp[1] * maxValues[1] + 0.5f); - blue = (int)(normComp[2] * maxValues[2] + 0.5f); - } - pxl = (alpha << offsets[3]) & componentMasks[3]; - } else { - red = (int)(normComp[0] * maxValues[0] + 0.5f); - green = (int)(normComp[1] * maxValues[1] + 0.5f); - blue = (int)(normComp[2] * maxValues[2] + 0.5f); - } - - pxl |= ((red << offsets[0]) & componentMasks[0]) - | ((green << offsets[1]) & componentMasks[1]) - | ((blue << offsets[2]) & componentMasks[2]); - - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[]; - if (pixel == null) { - ba = new byte[1]; - } else { - ba = (byte[])pixel; - } - ba[0] = (byte)pxl; - return ba; - - case DataBuffer.TYPE_USHORT: - short sa[]; - if (pixel == null) { - sa = new short[1]; - } else { - sa = (short[])pixel; - } - sa[0] = (short)pxl; - return sa; - - case DataBuffer.TYPE_INT: - int ia[]; - if (pixel == null) { - ia = new int[1]; - } else { - ia = (int[])pixel; - } - ia[0] = pxl; - return ia; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - } - - @Override - public final ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied) { - - if (!hasAlpha || this.isAlphaPremultiplied == isAlphaPremultiplied) { - return this; - } - - int minX = raster.getMinX(); - int minY = raster.getMinY(); - int w = raster.getWidth(); - int h = raster.getHeight(); - - int components[] = null; - int transparentComponents[] = new int[numComponents]; - - float alphaFactor = maxValues[numColorComponents]; - - if (isAlphaPremultiplied) { - switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - components = raster.getPixel(x, minY, components); - if (components[numColorComponents] == 0) { - raster.setPixel(x, minY, transparentComponents); - } else { - float alpha = components[numColorComponents] / alphaFactor; - for (int n = 0; n < numColorComponents; n++) { - components[n] = (int)(alpha * components[n] + 0.5f); - } - raster.setPixel(x, minY, components); - } - } - - } - break; - - default: - // awt.214=This Color Model doesn't support this - // transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - } else { - switch (transferType) { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - case DataBuffer.TYPE_INT: - for (int i = 0; i < h; i++, minY++) { - for (int j = 0, x = minX; j < w; j++, x++) { - components = raster.getPixel(x, minY, components); - if (components[numColorComponents] != 0) { - float alpha = alphaFactor / components[numColorComponents]; - for (int n = 0; n < numColorComponents; n++) { - components[n] = (int)(alpha * components[n] + 0.5f); - } - raster.setPixel(x, minY, components); - } - } - - } - break; - - default: - // awt.214=This Color Model doesn't support this - // transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - - } - - return new DirectColorModel(cs, pixel_bits, componentMasks[0], componentMasks[1], - componentMasks[2], componentMasks[3], isAlphaPremultiplied, transferType); - } - - @Override - public String toString() { - // The output format based on 1.5 release behaviour. - // It could be reveled such way: - // BufferedImage bi = new BufferedImage(1, 1, - // BufferedImage.TYPE_INT_ARGB); - // ColorModel cm = bi.getColorModel(); - // System.out.println(cm.toString()); - String str = "DirectColorModel:" + " rmask = " + //$NON-NLS-1$ //$NON-NLS-2$ - Integer.toHexString(componentMasks[0]) + " gmask = " + //$NON-NLS-1$ - Integer.toHexString(componentMasks[1]) + " bmask = " + //$NON-NLS-1$ - Integer.toHexString(componentMasks[2]) + " amask = " + //$NON-NLS-1$ - (!hasAlpha ? "0" : Integer.toHexString(componentMasks[3])); //$NON-NLS-1$ - - return str; - } - - @Override - public final int[] getComponents(Object pixel, int components[], int offset) { - - if (components == null) { - components = new int[numComponents + offset]; - } - - int intPixel = 0; - - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[])pixel; - intPixel = ba[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = (short[])pixel; - intPixel = sa[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int ia[] = (int[])pixel; - intPixel = ia[0]; - break; - - default: - // awt.22D=This transferType ( {0} ) is not supported by this - // color model - throw new UnsupportedOperationException(Messages.getString("awt.22D", //$NON-NLS-1$ - transferType)); - } - - return getComponents(intPixel, components, offset); - } - - @Override - public int getRed(Object inData) { - int pixel = 0; - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[])inData; - pixel = ba[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = (short[])inData; - pixel = sa[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int ia[] = (int[])inData; - pixel = ia[0]; - break; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - return getRed(pixel); - } - - @Override - public int getRGB(Object inData) { - int pixel = 0; - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[])inData; - pixel = ba[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = (short[])inData; - pixel = sa[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int ia[] = (int[])inData; - pixel = ia[0]; - break; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - return getRGB(pixel); - } - - @Override - public int getGreen(Object inData) { - int pixel = 0; - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[])inData; - pixel = ba[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = (short[])inData; - pixel = sa[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int ia[] = (int[])inData; - pixel = ia[0]; - break; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - return getGreen(pixel); - } - - @Override - public int getBlue(Object inData) { - int pixel = 0; - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[])inData; - pixel = ba[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = (short[])inData; - pixel = sa[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int ia[] = (int[])inData; - pixel = ia[0]; - break; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - return getBlue(pixel); - } - - @Override - public int getAlpha(Object inData) { - int pixel = 0; - switch (transferType) { - case DataBuffer.TYPE_BYTE: - byte ba[] = (byte[])inData; - pixel = ba[0] & 0xff; - break; - - case DataBuffer.TYPE_USHORT: - short sa[] = (short[])inData; - pixel = sa[0] & 0xffff; - break; - - case DataBuffer.TYPE_INT: - int ia[] = (int[])inData; - pixel = ia[0]; - break; - - default: - // awt.214=This Color Model doesn't support this transferType - throw new UnsupportedOperationException(Messages.getString("awt.214")); //$NON-NLS-1$ - } - return getAlpha(pixel); - } - - @Override - public final WritableRaster createCompatibleWritableRaster(int w, int h) { - if (w <= 0 || h <= 0) { - // awt.22E=w or h is less than or equal to zero - throw new IllegalArgumentException(Messages.getString("awt.22E")); //$NON-NLS-1$ - } - - int bandMasks[] = componentMasks.clone(); - - if (pixel_bits > 16) { - return Raster.createPackedRaster(DataBuffer.TYPE_INT, w, h, bandMasks, null); - } else if (pixel_bits > 8) { - return Raster.createPackedRaster(DataBuffer.TYPE_USHORT, w, h, bandMasks, null); - } else { - return Raster.createPackedRaster(DataBuffer.TYPE_BYTE, w, h, bandMasks, null); - } - } - - @Override - public boolean isCompatibleRaster(Raster raster) { - SampleModel sm = raster.getSampleModel(); - if (!(sm instanceof SinglePixelPackedSampleModel)) { - return false; - } - - SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel)sm; - - if (sppsm.getNumBands() != numComponents) { - return false; - } - if (raster.getTransferType() != transferType) { - return false; - } - - int maskBands[] = sppsm.getBitMasks(); - return Arrays.equals(maskBands, componentMasks); - } - - @Override - public int getDataElement(int components[], int offset) { - int pixel = 0; - for (int i = 0; i < numComponents; i++) { - pixel |= (components[offset + i] << offsets[i]) & componentMasks[i]; - } - return pixel; - } - - @Override - public final int[] getComponents(int pixel, int components[], int offset) { - if (components == null) { - components = new int[numComponents + offset]; - } - for (int i = 0; i < numComponents; i++) { - components[offset + i] = (pixel & componentMasks[i]) >> offsets[i]; - } - return components; - } - - @Override - public final int getRed(int pixel) { - if (is_sRGB) { - return getComponentFrom_sRGB(pixel, 0); - } - if (is_LINEAR_RGB) { - return getComponentFrom_LINEAR_RGB(pixel, 0); - } - return getComponentFrom_RGB(pixel, 0); - } - - @Override - public final int getRGB(int pixel) { - return (getAlpha(pixel) << 24) | (getRed(pixel) << 16) | (getGreen(pixel) << 8) - | getBlue(pixel); - } - - @Override - public final int getGreen(int pixel) { - if (is_sRGB) { - return getComponentFrom_sRGB(pixel, 1); - } - if (is_LINEAR_RGB) { - return getComponentFrom_LINEAR_RGB(pixel, 1); - } - return getComponentFrom_RGB(pixel, 1); - } - - @Override - public final int getBlue(int pixel) { - if (is_sRGB) { - return getComponentFrom_sRGB(pixel, 2); - } - if (is_LINEAR_RGB) { - return getComponentFrom_LINEAR_RGB(pixel, 2); - } - return getComponentFrom_RGB(pixel, 2); - } - - @Override - public final int getAlpha(int pixel) { - if (!hasAlpha) { - return 255; - } - int a = (pixel & componentMasks[3]) >>> offsets[3]; - if (bits[3] == 8) { - return a; - } - return alphaLUT[a] & 0xff; - } - - /** - * Gets the red mask. - * - * @return the red mask. - */ - public final int getRedMask() { - return componentMasks[0]; - } - - /** - * Gets the green mask. - * - * @return the green mask. - */ - public final int getGreenMask() { - return componentMasks[1]; - } - - /** - * Gets the blue mask. - * - * @return the blue mask. - */ - public final int getBlueMask() { - return componentMasks[2]; - } - - /** - * Gets the alpha mask. - * - * @return the alpha mask. - */ - public final int getAlphaMask() { - if (hasAlpha) { - return componentMasks[3]; - } - return 0; - } - - /** - * Initialization of Lookup tables. - */ - private void initLUTs() { - is_sRGB = cs.isCS_sRGB(); - is_LINEAR_RGB = (cs == LUTColorConverter.LINEAR_RGB_CS); - - if (is_LINEAR_RGB) { - if (maxBitLength > 8) { - LINEAR_RGB_Length = 16; - from_LINEAR_RGB_LUT = LUTColorConverter.getFrom16lRGBtosRGB_LUT(); - to_LINEAR_16RGB_LUT = LUTColorConverter.getFromsRGBto16lRGB_LUT(); - } else { - LINEAR_RGB_Length = 8; - from_LINEAR_RGB_LUT = LUTColorConverter.getFrom8lRGBtosRGB_LUT(); - to_LINEAR_8RGB_LUT = LUTColorConverter.getFromsRGBto8lRGB_LUT(); - } - fFactor = ((1 << LINEAR_RGB_Length) - 1); - } else { - fFactor = 255.0f; - } - - if (hasAlpha && bits[3] != 8) { - alphaLUT = new byte[maxValues[3] + 1]; - for (int i = 0; i <= maxValues[3]; i++) { - alphaLUT[i] = (byte)(scales[3] * i + 0.5f); - } - - } - - if (!isAlphaPremultiplied) { - colorLUTs = new byte[3][]; - - if (is_sRGB) { - for (int i = 0; i < numColorComponents; i++) { - if (bits[i] != 8) { - for (int j = 0; j < i; j++) { - if (bits[i] == bits[j]) { - colorLUTs[i] = colorLUTs[j]; - break; - } - } - colorLUTs[i] = new byte[maxValues[i] + 1]; - for (int j = 0; j <= maxValues[i]; j++) { - colorLUTs[i][j] = (byte)(scales[i] * j + 0.5f); - } - } - } - } - - if (is_LINEAR_RGB) { - for (int i = 0; i < numColorComponents; i++) { - if (bits[i] != LINEAR_RGB_Length) { - for (int j = 0; j < i; j++) { - if (bits[i] == bits[j]) { - colorLUTs[i] = colorLUTs[j]; - break; - } - } - colorLUTs[i] = new byte[maxValues[i] + 1]; - for (int j = 0; j <= maxValues[0]; j++) { - int idx; - if (LINEAR_RGB_Length == 8) { - idx = (int)(scales[i] * j + 0.5f); - } else { - idx = (int)(scales[i] * j * 257.0f + 0.5f); - } - colorLUTs[i][j] = from_LINEAR_RGB_LUT[idx]; - } - } - } - } - - } - } - - /** - * This method return RGB component value if Color Model has sRGB - * ColorSpace. - * - * @param pixel - * the integer representation of the pixel. - * @param idx - * the index of the pixel component. - * @return the value of the pixel component scaled from 0 to 255. - */ - private int getComponentFrom_sRGB(int pixel, int idx) { - int comp = (pixel & componentMasks[idx]) >> offsets[idx]; - if (isAlphaPremultiplied) { - int alpha = (pixel & componentMasks[3]) >>> offsets[3]; - comp = alpha == 0 ? 0 : (int)(scales[idx] * comp * 255.0f / (scales[3] * alpha) + 0.5f); - } else if (bits[idx] != 8) { - comp = colorLUTs[idx][comp] & 0xff; - } - return comp; - } - - /** - * This method return RGB component value if Color Model has Linear RGB - * ColorSpace. - * - * @param pixel - * the integer representation of the pixel. - * @param idx - * the index of the pixel component. - * @return the value of the pixel component scaled from 0 to 255. - */ - private int getComponentFrom_LINEAR_RGB(int pixel, int idx) { - int comp = (pixel & componentMasks[idx]) >> offsets[idx]; - if (isAlphaPremultiplied) { - float factor = ((1 << LINEAR_RGB_Length) - 1); - int alpha = (pixel & componentMasks[3]) >> offsets[3]; - comp = alpha == 0 ? 0 : (int)(scales[idx] * comp * factor / (scales[3] * alpha) + 0.5f); - } else if (bits[idx] != LINEAR_RGB_Length) { - comp = colorLUTs[idx][comp] & 0xff; - } else { - comp = from_LINEAR_RGB_LUT[comp] & 0xff; - } - return comp; - } - - /** - * This method return RGB component value if Color Model has arbitrary RGB - * ColorSapce. - * - * @param pixel - * the integer representation of the pixel. - * @param idx - * the index of the pixel component. - * @return the value of the pixel component scaled from 0 to 255. - */ - private int getComponentFrom_RGB(int pixel, int idx) { - int components[] = getComponents(pixel, null, 0); - float[] normComponents = getNormalizedComponents(components, 0, null, 0); - float[] sRGBcomponents = cs.toRGB(normComponents); - return (int)(sRGBcomponents[idx] * 255.0f + 0.5f); - } - -} |