diff options
| author | Tom Tromey <tromey@redhat.com> | 2005-07-16 01:27:14 +0000 |
|---|---|---|
| committer | Tom Tromey <tromey@gcc.gnu.org> | 2005-07-16 01:27:14 +0000 |
| commit | b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1 (patch) | |
| tree | 8762d1f992e2f725a6bde1ff966ed6f1e5f4f823 /libjava/java/awt/image/ComponentColorModel.java | |
| parent | ea54b29342c8506acb4f858c68340c44b72e3532 (diff) | |
Major merge with Classpath.
Removed many duplicate files.
* HACKING: Updated.x
* classpath: Imported new directory.
* standard.omit: New file.
* Makefile.in, aclocal.m4, configure: Rebuilt.
* sources.am: New file.
* configure.ac: Run Classpath configure script. Moved code around
to support. Disable xlib AWT peers (temporarily).
* Makefile.am (SUBDIRS): Added 'classpath'
(JAVAC): Removed.
(AM_CPPFLAGS): Added more -I options.
(BOOTCLASSPATH): Simplified.
Completely redid how sources are built.
Include sources.am.
* include/Makefile.am (tool_include__HEADERS): Removed jni.h.
* include/jni.h: Removed (in Classpath).
* scripts/classes.pl: Updated to look at built classes.
* scripts/makemake.tcl: New file.
* testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Added
-I options.
(gcj_jni_invocation_compile_c_to_binary): Likewise.
From-SVN: r102082
Diffstat (limited to 'libjava/java/awt/image/ComponentColorModel.java')
| -rw-r--r-- | libjava/java/awt/image/ComponentColorModel.java | 391 |
1 files changed, 0 insertions, 391 deletions
diff --git a/libjava/java/awt/image/ComponentColorModel.java b/libjava/java/awt/image/ComponentColorModel.java deleted file mode 100644 index f56688f9362..00000000000 --- a/libjava/java/awt/image/ComponentColorModel.java +++ /dev/null @@ -1,391 +0,0 @@ -/* ComponentColorModel.java -- - Copyright (C) 2000, 2002, 2004 Free Software Foundation - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - - -package java.awt.image; - -import gnu.java.awt.Buffers; - -import java.awt.Point; -import java.awt.color.ColorSpace; - -public class ComponentColorModel extends ColorModel -{ - private static int sum(int[] values) - { - int sum = 0; - for (int i=0; i<values.length; i++) - sum += values[i]; - return sum; - } - - public ComponentColorModel(ColorSpace colorSpace, int[] bits, - boolean hasAlpha, - boolean isAlphaPremultiplied, - int transparency, int transferType) - { - super(sum(bits), bits, colorSpace, hasAlpha, isAlphaPremultiplied, - transparency, transferType); - } - - /** - * Construct a new ComponentColorModel. - * - * This constructor makes all bits of each sample significant, so for a - * transferType of DataBuffer.BYTE, the bits per sample is 8, etc. If - * both hasAlpha and isAlphaPremultiplied are true, color samples are - * assumed to be premultiplied by the alpha component. Transparency may be - * one of OPAQUE, BITMASK, or TRANSLUCENT. - * - * @param colorSpace The colorspace for this color model. - * @param hasAlpha True if there is an alpha component. - * @param isAlphaPremultiplied True if colors are already multiplied by - * alpha. - * @param transparency The type of alpha values. - * @param transferType Data type of pixel sample values. - * @since 1.4 - */ - public ComponentColorModel(ColorSpace colorSpace, - boolean hasAlpha, - boolean isAlphaPremultiplied, - int transparency, int transferType) - { - this(colorSpace, null, hasAlpha, isAlphaPremultiplied, - transparency, transferType); - } - - public int getRed(int pixel) - { - if (getNumComponents()>1) throw new IllegalArgumentException(); - return (int) getRGBFloat(pixel)[0]; - } - - public int getGreen(int pixel) - { - if (getNumComponents()>1) throw new IllegalArgumentException(); - return (int) getRGBFloat(pixel)[0]; - } - - public int getBlue(int pixel) - { - if (getNumComponents()>1) throw new IllegalArgumentException(); - return (int) getRGBFloat(pixel)[0]; - } - - public int getAlpha(int pixel) - { - if (getNumComponents()>1) throw new IllegalArgumentException(); - int shift = 8 - getComponentSize(getNumColorComponents()); - if (shift >= 0) return pixel << shift; - return pixel >> (-shift); - } - - public int getRGB(int pixel) - { - float[] rgb = getRGBFloat(pixel); - int ret = getRGB(rgb); - if (hasAlpha()) ret |= getAlpha(pixel) << 24; - return ret; - } - - - /* Note, it's OK to pass a to large array to toRGB(). Extra - elements are ignored. */ - - private float[] getRGBFloat(int pixel) - { - float[] data = { pixel }; - return cspace.toRGB(data); - } - - private float[] getRGBFloat(Object inData) - { - DataBuffer buffer = - Buffers.createBufferFromData(transferType, inData, - getNumComponents()); - int colors = getNumColorComponents(); - float[] data = new float[colors]; - - // FIXME: unpremultiply data that is premultiplied - for (int i=0; i<colors; i++) - { - float maxValue = (1<<getComponentSize(i))-1; - data[i] = buffer.getElemFloat(i)/maxValue; - } - float[] rgb = cspace.toRGB(data); - return rgb; - } - - public int getRed(Object inData) - { - return (int) getRGBFloat(inData)[0]*255; - } - - public int getGreen(Object inData) - { - return (int) getRGBFloat(inData)[1]*255; - } - - public int getBlue(Object inData) - { - return (int) getRGBFloat(inData)[2]*255; - } - - public int getAlpha(Object inData) - { - DataBuffer buffer = - Buffers.createBufferFromData(transferType, inData, - getNumComponents()); - int shift = 8 - getComponentSize(getNumColorComponents()); - int alpha = buffer.getElem(getNumColorComponents()); - if (shift >= 0) return alpha << shift; - return alpha >> (-shift); - } - - private int getRGB(float[] rgb) - { - /* NOTE: We could cast to byte instead of int here. This would - avoid bits spilling over from one bit field to - another. But, if we assume that floats are in the [0.0, - 1.0] range, this will never happen anyway. */ - - /* Remember to multiply BEFORE casting to int, otherwise, decimal - point data will be lost. */ - int ret = - (((int) (rgb[0]*255F)) << 16) | - (((int) (rgb[1]*255F)) << 8) | - (((int) (rgb[2]*255F)) << 0); - return ret; - } - - /** - * @param inData pixel data of transferType, as returned by the - * getDataElements method in SampleModel. - */ - public int getRGB(Object inData) - { - float[] rgb = getRGBFloat(inData); - int ret = getRGB(rgb); - if (hasAlpha()) ret |= getAlpha(inData) << 24; - return ret; - } - - public Object getDataElements(int rgb, Object pixel) - { - // Convert rgb to [0.0, 1.0] sRGB values. - float[] rgbFloats = { - ((rgb >> 16)&0xff)/255.0F, - ((rgb >> 8)&0xff)/255.0F, - ((rgb >> 0)&0xff)/255.0F - }; - - // Convert from rgb to color space components. - float[] data = cspace.fromRGB(rgbFloats); - DataBuffer buffer = Buffers.createBuffer(transferType, pixel, - getNumComponents()); - int numColors = getNumColorComponents(); - - if (hasAlpha()) - { - float alpha = ((rgb >> 24)&0xff)/255.0F; - - /* If color model has alpha and should be premultiplied, multiply - color space components with alpha value. */ - if (isAlphaPremultiplied()) { - for (int i=0; i<numColors; i++) - data[i] *= alpha; - } - // Scale the alpha sample to the correct number of bits. - alpha *= (1<<(bits[numColors]-1)); - // Arrange the alpha sample in the output array. - buffer.setElemFloat(numColors, alpha); - } - for (int i=0; i<numColors; i++) - { - // Scale the color samples to the correct number of bits. - float value = data[i]*(1<<(bits[i]-1)); - // Arrange the color samples in the output array. - buffer.setElemFloat(i, value); - } - return Buffers.getData(buffer); - } - - public int[] getComponents(int pixel, int[] components, int offset) - { - if (getNumComponents()>1) throw new IllegalArgumentException(); - if (components == null) - components = new int[getNumComponents() + offset]; - components[offset] = pixel; - return components; - } - - public int[] getComponents(Object pixel, int[] components, int offset) - { - DataBuffer buffer = Buffers.createBuffer(transferType, pixel, - getNumComponents()); - int numComponents = getNumComponents(); - - if (components == null) - components = new int[numComponents + offset]; - - for (int i=0; i<numComponents; i++) - components[offset++] = buffer.getElem(i); - - return components; - } - - public int getDataElement(int[] components, int offset) - { - if (getNumComponents()>1) throw new IllegalArgumentException(); - return components[offset]; - } - - public Object getDataElements(int[] components, int offset, Object obj) - { - DataBuffer buffer = Buffers.createBuffer(transferType, obj, - getNumComponents()); - int numComponents = getNumComponents(); - - for (int i=0; i<numComponents; i++) - buffer.setElem(i, components[offset++]); - - return Buffers.getData(buffer); - } - - public ColorModel coerceData(WritableRaster raster, - boolean isAlphaPremultiplied) { - if (this.isAlphaPremultiplied == isAlphaPremultiplied) - return this; - - /* TODO: provide better implementation based on the - assumptions we can make due to the specific type of the - color model. */ - super.coerceData(raster, isAlphaPremultiplied); - - return new ComponentColorModel(cspace, bits, hasAlpha(), - isAlphaPremultiplied, // argument - transparency, transferType); - } - - public boolean isCompatibleRaster(Raster raster) - { - return super.isCompatibleRaster(raster); - // FIXME: Should we test something more here? (Why override?) - } - - public WritableRaster createCompatibleWritableRaster(int w, int h) - { - SampleModel sm = createCompatibleSampleModel(w, h); - Point origin = new Point(0, 0); - return Raster.createWritableRaster(sm, origin); - } - - - /** - * Creates a <code>SampleModel</code> whose arrangement of pixel - * data is compatible to this <code>ColorModel</code>. - * - * @param w the number of pixels in the horizontal direction. - * @param h the number of pixels in the vertical direction. - */ - public SampleModel createCompatibleSampleModel(int w, int h) - { - int pixelStride, scanlineStride; - int[] bandOffsets; - - pixelStride = getNumComponents(); - scanlineStride = pixelStride * w; - - /* We might be able to re-use the same bandOffsets array among - * multiple calls to this method. However, this optimization does - * not seem worthwile because setting up descriptive data - * structures (such as SampleModels) is neglectible in comparision - * to shuffling around masses of pixel data. - */ - bandOffsets = new int[pixelStride]; - for (int i = 0; i < pixelStride; i++) - bandOffsets[i] = i; - - /* FIXME: Think about whether it would make sense to return the - * possibly more efficient PixelInterleavedSampleModel for other - * transferTypes as well. It seems unlikely that this would break - * any user applications, so the Mauve tests on this method - * might be too restrictive. - */ - switch (transferType) - { - case DataBuffer.TYPE_BYTE: - case DataBuffer.TYPE_USHORT: - return new PixelInterleavedSampleModel(transferType, w, h, - pixelStride, - scanlineStride, - bandOffsets); - - default: - return new ComponentSampleModel(transferType, w, h, - pixelStride, - scanlineStride, - bandOffsets); - } - } - - - public boolean isCompatibleSampleModel(SampleModel sm) - { - return - (sm instanceof ComponentSampleModel) && - super.isCompatibleSampleModel(sm); - } - - public WritableRaster getAlphaRaster(WritableRaster raster) - { - if (!hasAlpha()) return null; - - SampleModel sm = raster.getSampleModel(); - int[] alphaBand = { sm.getNumBands() - 1 }; - SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand); - DataBuffer buffer = raster.getDataBuffer(); - Point origin = new Point(0, 0); - return Raster.createWritableRaster(alphaModel, buffer, origin); - } - - public boolean equals(Object obj) - { - if (!(obj instanceof ComponentColorModel)) return false; - return super.equals(obj); - } -} |
