Return-Path: X-Original-To: apmail-incubator-flex-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-flex-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 48C28D9AE for ; Thu, 25 Oct 2012 19:03:15 +0000 (UTC) Received: (qmail 77357 invoked by uid 500); 25 Oct 2012 19:03:15 -0000 Delivered-To: apmail-incubator-flex-commits-archive@incubator.apache.org Received: (qmail 77310 invoked by uid 500); 25 Oct 2012 19:03:15 -0000 Mailing-List: contact flex-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: flex-dev@incubator.apache.org Delivered-To: mailing list flex-commits@incubator.apache.org Received: (qmail 77168 invoked by uid 99); 25 Oct 2012 19:03:15 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Oct 2012 19:03:15 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Oct 2012 19:03:09 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 1026F2388BA4; Thu, 25 Oct 2012 19:02:00 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1402274 [8/31] - in /incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext: ./ awt/ awt/color/ awt/font/ awt/g2d/ awt/geom/ awt/image/ awt/image/codec/ awt/image/codec/jpeg/ awt/image/codec/pn... Date: Thu, 25 Oct 2012 19:01:49 -0000 To: flex-commits@incubator.apache.org From: cframpton@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20121025190200.1026F2388BA4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/AbstractLight.java URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/AbstractLight.java?rev=1402274&view=auto ============================================================================== --- incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/AbstractLight.java (added) +++ incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/AbstractLight.java Thu Oct 25 19:01:43 2012 @@ -0,0 +1,146 @@ +/* + + 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. + + */ +package org.apache.flex.forks.batik.ext.awt.image; + +import java.awt.Color; + +/** + * An abstract implementation of the Light interface. + * + * @author Thomas DeWeese + * @version $Id: AbstractLight.java 475477 2006-11-15 22:44:28Z cam $ + */ +public abstract class AbstractLight implements Light { + /** + * Conversion function for light values. + */ + public static final double sRGBToLsRGB(double value) { + if(value <= 0.003928) + return value/12.92; + return Math.pow((value+0.055)/1.055, 2.4); + } + + /** + * Light color in linear sRGB + */ + private double[] color; + + /** + * @param linear if true the color is returned in the Linear sRGB + * colorspace otherwise the color is in the gamma + * corrected sRGB color space. + * @return the light's color + */ + public double[] getColor(boolean linear){ + double [] ret = new double[3]; + if (linear) { + ret[0] = sRGBToLsRGB(color[0]); + ret[1] = sRGBToLsRGB(color[1]); + ret[2] = sRGBToLsRGB(color[2]); + } else { + ret[0] = color[0]; + ret[1] = color[1]; + ret[2] = color[2]; + } + return ret; + } + + public AbstractLight(Color color){ + setColor(color); + } + + /** + * Sets the new light color, newColor should be in sRGB. + */ + public void setColor(Color newColor){ + color = new double[3]; + color[0] = newColor.getRed() /255.; + color[1] = newColor.getGreen()/255.; + color[2] = newColor.getBlue() /255.; + } + + /** + * @return true if the light is constant over the whole surface + */ + public boolean isConstant(){ + return true; + } + + /** + * Returns a light map, starting in (x, y) with dx, dy increments, a given + * width and height, and z elevations stored in the fourth component on the + * N array. + * + * @param x x-axis coordinate where the light should be computed + * @param y y-axis coordinate where the light should be computed + * @param dx delta x for computing light vectors in user space + * @param dy delta y for computing light vectors in user space + * @param width number of samples to compute on the x axis + * @param height number of samples to compute on the y axis + * @param z array containing the z elevation for all the points + */ + public double[][][] getLightMap(double x, double y, + final double dx, final double dy, + final int width, final int height, + final double[][][] z) + { + double[][][] L = new double[height][][]; + + for(int i=0; iVincent Hardy + * @version $Id: ComponentTransferFunction.java 478249 2006-11-22 17:29:37Z dvholten $ + */ +public interface ComponentTransferFunction { + /** + * The various transfer types + */ + int IDENTITY = 0; + int TABLE = 1; + int DISCRETE = 2; + int LINEAR = 3; + int GAMMA = 4; + + /** + * Returns the type of this transfer function + */ + int getType(); + + /** + * Returns the slope value for this transfer function + */ + float getSlope(); + + /** + * Returns the table values for this transfer function + */ + float[] getTableValues(); + + /** + * Returns the intercept value for this transfer function + */ + float getIntercept(); + + /** + * Returns the amplitude value for this transfer function + */ + float getAmplitude(); + + /** + * Returns the exponent value for this transfer function + */ + float getExponent(); + + /** + * Returns the offset value for this transfer function + */ + float getOffset(); +} + Propchange: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/ComponentTransferFunction.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/CompositeRule.java URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/CompositeRule.java?rev=1402274&view=auto ============================================================================== --- incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/CompositeRule.java (added) +++ incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/CompositeRule.java Thu Oct 25 19:01:43 2012 @@ -0,0 +1,278 @@ +/* + + 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. + + */ +package org.apache.flex.forks.batik.ext.awt.image; + +/** + * This is a typesafe enumeration of the standard Composite rules for + * the CompositeRable operation. (over, in, out, atop, xor, arith) + * + * @author Thomas DeWeese + * @version $Id: CompositeRule.java 478249 2006-11-22 17:29:37Z dvholten $ + */ +public final class CompositeRule implements java.io.Serializable { + + /** Porter-Duff src over rule, also used for feBlend normal. */ + public static final int RULE_OVER = 1; + + /** Porter-Duff src in rule. */ + public static final int RULE_IN = 2; + + /** Porter-Duff src out rule. */ + public static final int RULE_OUT = 3; + + /** Porter-Duff src atop rule. */ + public static final int RULE_ATOP = 4; + + /** Porter-Duff src xor rule. */ + public static final int RULE_XOR = 5; + + /** Arithmatic rule 'out = k1*i1*i2 + k2*i1 + k3*i2 + k4'. */ + public static final int RULE_ARITHMETIC = 6; + + /** SVG feBlend Multiply rule */ + public static final int RULE_MULTIPLY = 7; + + /** SVG feBlend Screen rule */ + public static final int RULE_SCREEN = 8; + + /** SVG feBlend Darken rule */ + public static final int RULE_DARKEN = 9; + + /** SVG feBlend Lighten rule */ + public static final int RULE_LIGHTEN = 10; + + + /** + * Porter-Duff Source Over Destination rule. The source is + * composited over the destination.
+       *
+       *  Fs = 1 and Fd = (1-As), thus:
+       *
+       *        Cd = Cs + Cd*(1-As)
+       *        Ad = As + Ad*(1-As)
+ * + */ + public static final CompositeRule OVER = new CompositeRule(RULE_OVER); + + /** + * Porter-Duff Source In Destination rule. The part of the + * source lying inside of the destination replaces the destination.
+       *
+       *  Fs = Ad and Fd = 0, thus:
+       *
+       *        Cd = Cs*Ad
+       *        Ad = As*Ad
+       * 
+ */ + public static final CompositeRule IN = new CompositeRule(RULE_IN); + + /** + * Porter-Duff Source Out Destination rule. The part of the + * source lying outside of the destination replaces the destination.
+       *
+       *  Fs = (1-Ad) and Fd = 0, thus:
+       *
+       *        Cd = Cs*(1-Ad)
+       *        Ad = As*(1-Ad)
+       * 
+ */ + public static final CompositeRule OUT = new CompositeRule(RULE_OUT); + + /** + * Porter-Duff Source Atop Destination rule. The part of the + * source lying inside of the destination replaces the destination, + * destination remains outside of source.
+       *
+       *  Fs = Ad and Fd = (1-As), thus:
+       *
+       *        Cd = Cs*Ad + Cd*(1-As)
+       *        Ad = As*Ad + Ad*(1-As)
+       * 
+ */ + public static final CompositeRule ATOP = new CompositeRule(RULE_ATOP); + + /** + * Xor rule. The source and destination are Xor'ed togeather.
+       *
+       *  Fs = (1-Ad) and Fd = (1-As), thus:
+       *
+       *        Cd = Cs*(1-Ad) + Cd*(1-As)
+       *        Ad = As*(1-Ad) + Ad*(1-As)
+       * 
+ */ + public static final CompositeRule XOR = new CompositeRule(RULE_XOR); + + /** + * Factory to create artithmatic CompositeRules. + * 'out = k1*i1*i2 + k2*i1 + k3*i2 + k4' + * Note that arithmatic CompositeRules are not singletons. + */ + public static CompositeRule ARITHMETIC + (float k1, float k2, float k3, float k4) { + return new CompositeRule(k1, k2, k3, k4); + } + + /** + * FeBlend Multiply rule.
+       *
+       *        Cd = Cs*(1-Ad) + Cd*(1-As) + Cs*Cd
+       *        Ad = 1 - (1-Ad)*(1-As)
+       * 
+ */ + public static final CompositeRule MULTIPLY = + new CompositeRule(RULE_MULTIPLY); + + /** + * FeBlend Screen rule.
+       *
+       *        Cd = Cs + Cd - Cs*Cd
+       *        Ad = 1 - (1-Ad)*(1-As)
+       * 
+ */ + public static final CompositeRule SCREEN = + new CompositeRule(RULE_SCREEN); + + /** + * FeBlend Darken rule.
+       *
+       *        Cd = Min(Cs*(1-Ad) + Cd,
+       *                 Cd*(1-As) + Cs)
+       *        Ad = 1 - (1-Ad)*(1-As)
+       * 
+ */ + public static final CompositeRule DARKEN = + new CompositeRule(RULE_DARKEN); + + + /** + * FeBlend Lighten rule.
+       *
+       *        Cd = Max(Cs*(1-Ad) + Cd,
+       *                 Cd*(1-As) + Cs)
+       *        Ad = 1 - (1-Ad)*(1-As)
+       * 
+ */ + public static final CompositeRule LIGHTEN = + new CompositeRule(RULE_LIGHTEN); + + + /** + * Returns the type of this composite rule + */ + public int getRule() { + return rule; + } + + /** + * The composite rule for this object. + */ + private int rule; + + /* Arithmatic constants, only used for RULE_ARITHMETIC */ + private float k1, k2, k3, k4; + + private CompositeRule(int rule) { + this.rule = rule; + } + + private CompositeRule(float k1, float k2, float k3, float k4) { + rule = RULE_ARITHMETIC; + this.k1 = k1; + this.k2 = k2; + this.k3 = k3; + this.k4 = k4; + } + + public float [] getCoefficients() { + if (rule != RULE_ARITHMETIC) + return null; + + return new float[] {k1, k2, k3, k4}; + } + + /** + * This is called by the serialization code before it returns + * an unserialized object. To provide for unicity of + * instances, the instance that was read is replaced by its + * static equivalent. See the serialiazation specification for + * further details on this method's logic. + */ + private Object readResolve() throws java.io.ObjectStreamException { + switch(rule){ + case RULE_OVER: + return OVER; + case RULE_IN: + return IN; + case RULE_OUT: + return OUT; + case RULE_ATOP: + return ATOP; + case RULE_XOR: + return XOR; + case RULE_ARITHMETIC: + return this; + case RULE_MULTIPLY: + return MULTIPLY; + case RULE_SCREEN: + return SCREEN; + case RULE_DARKEN: + return DARKEN; + case RULE_LIGHTEN: + return LIGHTEN; + default: + throw new Error("Unknown Composite Rule type"); + } + } + + /** + * This is called by the serialization code before it returns + * an unserialized object. To provide for unicity of + * instances, the instance that was read is replaced by its + * static equivalent. See the serialiazation specification for + * further details on this method's logic. + */ + public String toString() { + switch(rule){ + case RULE_OVER: + return "[CompositeRule: OVER]"; + case RULE_IN: + return "[CompositeRule: IN]"; + case RULE_OUT: + return "[CompositeRule: OUT]"; + case RULE_ATOP: + return "[CompositeRule: ATOP]"; + case RULE_XOR: + return "[CompositeRule: XOR]"; + case RULE_ARITHMETIC: + return ("[CompositeRule: ARITHMATIC k1:" + + k1 + " k2: " + k2 + " k3: " + k3 + " k4: " + k4 + ']' ); + case RULE_MULTIPLY: + return "[CompositeRule: MULTIPLY]"; + case RULE_SCREEN: + return "[CompositeRule: SCREEN]"; + case RULE_DARKEN: + return "[CompositeRule: DARKEN]"; + case RULE_LIGHTEN: + return "[CompositeRule: LIGHTEN]"; + default: + throw new Error("Unknown Composite Rule type"); + } + } + +} Propchange: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/CompositeRule.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/ConcreteComponentTransferFunction.java URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/ConcreteComponentTransferFunction.java?rev=1402274&view=auto ============================================================================== --- incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/ConcreteComponentTransferFunction.java (added) +++ incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/ConcreteComponentTransferFunction.java Thu Oct 25 19:01:43 2012 @@ -0,0 +1,182 @@ +/* + + 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. + + */ +package org.apache.flex.forks.batik.ext.awt.image; + + + +/** + * This class implements the interface expected from a component + * transfer function. + * + * @author Vincent Hardy + * @version $Id: ConcreteComponentTransferFunction.java 478249 2006-11-22 17:29:37Z dvholten $ + */ +public class ConcreteComponentTransferFunction implements ComponentTransferFunction { + private int type; + private float slope; + private float[] tableValues; + private float intercept; + private float amplitude; + private float exponent; + private float offset; + + /** + * Instances should be created through the various + * factory methods. + */ + private ConcreteComponentTransferFunction(){ + } + + /** + * Returns an instance initialized as an identity + * transfer function + */ + public static ComponentTransferFunction getIdentityTransfer(){ + ConcreteComponentTransferFunction f = new ConcreteComponentTransferFunction(); + f.type = IDENTITY; + return f; + } + + /** + * Returns a table transfer function + */ + public static ComponentTransferFunction + getTableTransfer(float[] tableValues){ + ConcreteComponentTransferFunction f = new ConcreteComponentTransferFunction(); + f.type = TABLE; + + if(tableValues == null){ + throw new IllegalArgumentException(); + } + + if(tableValues.length < 2){ + throw new IllegalArgumentException(); + } + + f.tableValues = new float[tableValues.length]; + System.arraycopy(tableValues, 0, + f.tableValues, 0, + tableValues.length); + + return f; + } + + /** + * Returns a discrete transfer function + */ + public static ComponentTransferFunction + getDiscreteTransfer(float[] tableValues){ + ConcreteComponentTransferFunction f = new ConcreteComponentTransferFunction(); + f.type = DISCRETE; + + if(tableValues == null){ + throw new IllegalArgumentException(); + } + + if(tableValues.length < 2){ + throw new IllegalArgumentException(); + } + + f.tableValues = new float[tableValues.length]; + System.arraycopy(tableValues, 0, + f.tableValues, 0, + tableValues.length); + + return f; + } + + /** + * Returns a linear transfer function + */ + public static ComponentTransferFunction + getLinearTransfer(float slope, float intercept){ + ConcreteComponentTransferFunction f = new ConcreteComponentTransferFunction(); + f.type = LINEAR; + f.slope = slope; + f.intercept = intercept; + + return f; + } + + /** + * Returns a gamma function + */ + public static ComponentTransferFunction + getGammaTransfer(float amplitude, + float exponent, + float offset){ + ConcreteComponentTransferFunction f = new ConcreteComponentTransferFunction(); + f.type = GAMMA; + f.amplitude = amplitude; + f.exponent = exponent; + f.offset = offset; + + return f; + } + + /** + * Returns the type of this transfer function + */ + public int getType(){ + return type; + } + + /** + * Returns the slope value for this transfer function + */ + public float getSlope(){ + return slope; + } + + /** + * Returns the table values for this transfer function + */ + public float[] getTableValues(){ + return tableValues; + } + + /** + * Returns the intercept value for this transfer function + */ + public float getIntercept(){ + return intercept; + } + + /** + * Returns the amplitude value for this transfer function + */ + public float getAmplitude(){ + return amplitude; + } + + /** + * Returns the exponent value for this transfer function + */ + public float getExponent(){ + return exponent; + } + + /** + * Returns the offset value for this transfer function + */ + public float getOffset(){ + return offset; + } +} + Propchange: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/ConcreteComponentTransferFunction.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DiscreteTransfer.java URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DiscreteTransfer.java?rev=1402274&view=auto ============================================================================== --- incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DiscreteTransfer.java (added) +++ incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DiscreteTransfer.java Thu Oct 25 19:01:43 2012 @@ -0,0 +1,79 @@ +/* + + 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. + + */ +package org.apache.flex.forks.batik.ext.awt.image; + + +/** + * This class defines the Discrete type transfer function for the + * feComponentTransfer filter, as defined in chapter 15, section 11 + * of the SVG specification. + * + * @author Sheng Pei + * @version $Id: DiscreteTransfer.java 475477 2006-11-15 22:44:28Z cam $ + */ +public class DiscreteTransfer implements TransferFunction { + /** + * This byte array stores the lookuptable data + */ + public byte [] lutData; + + /** + * This int array is the input table values from the user + */ + public int [] tableValues; + + /* + * The number of the input table's elements + */ + private int n; + + /** + * The input is an int array which will be used + * later to construct the lut data + */ + public DiscreteTransfer(int [] tableValues){ + this.tableValues = tableValues; + this.n = tableValues.length; + } + + /* + * This method will build the lut data. Each entry + * has the value as its index. + */ + private void buildLutData(){ + lutData = new byte [256]; + int i, j; + for (j=0; j<=255; j++){ + i = (int)(Math.floor(j*n/255f)); + if(i == n){ + i = n-1; + } + lutData[j] = (byte)(tableValues[i] & 0xff); + } + } + + /** + * This method will return the lut data in order + * to construct a LookUpTable object + */ + public byte [] getLookupTable(){ + buildLutData(); + return lutData; + } +} Propchange: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DiscreteTransfer.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DistantLight.java URL: http://svn.apache.org/viewvc/incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DistantLight.java?rev=1402274&view=auto ============================================================================== --- incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DistantLight.java (added) +++ incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/DistantLight.java Thu Oct 25 19:01:43 2012 @@ -0,0 +1,144 @@ +/* + + 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. + + */ +package org.apache.flex.forks.batik.ext.awt.image; + +import java.awt.Color; + +/** + * A light source placed at the infinity, such that the light angle is + * constant over the whole surface. + * + * @author Vincent Hardy + * @version $Id: DistantLight.java 501495 2007-01-30 18:00:36Z dvholten $ + */ +public class DistantLight extends AbstractLight { + /** + * The azimuth of the distant light, i.e., the angle of the light vector + * on the (X, Y) plane + */ + private double azimuth; + + /** + * The elevation of the distant light, i.e., the angle of the light + * vector on the (X, Z) plane. + */ + private double elevation; + + /** + * Light vector + */ + private double Lx, Ly, Lz; + + /** + * @return the DistantLight's azimuth + */ + public double getAzimuth(){ + return azimuth; + } + + /** + * @return the DistantLight's elevation + */ + public double getElevation(){ + return elevation; + } + + public DistantLight(double azimuth, double elevation, Color color){ + super(color); + + this.azimuth = azimuth; + this.elevation = elevation; + + Lx = Math.cos( Math.toRadians( azimuth ) ) * Math.cos( Math.toRadians( elevation ) ); + Ly = Math.sin( Math.toRadians( azimuth ) ) * Math.cos( Math.toRadians( elevation ) ); + Lz = Math.sin( Math.toRadians( elevation )); + } + + /** + * @return true if the light is constant over the whole surface + */ + public boolean isConstant(){ + return true; + } + + /** + * Computes the light vector in (x, y) + * + * @param x x-axis coordinate where the light should be computed + * @param y y-axis coordinate where the light should be computed + * @param L array of length 3 where the result is stored + */ + public void getLight(final double x, final double y, final double z, + final double[] L){ + L[0] = Lx; + L[1] = Ly; + L[2] = Lz; + } + + /** + * Returns a row of the light map, starting at (x, y) with dx + * increments, a given width, and z elevations stored in the + * fourth component on the N array. + * + * @param x x-axis coordinate where the light should be computed + * @param y y-axis coordinate where the light should be computed + * @param dx delta x for computing light vectors in user space + * @param width number of samples to compute on the x axis + * @param z array containing the z elevation for all the points + * @param lightRow array to store the light info to, if null it will + * be allocated for you and returned. + * + * @return an array width columns where each element + * is an array of three components representing the x, y and z + * components of the light vector. */ + public double[][] getLightRow(double x, double y, + final double dx, final int width, + final double[][] z, + final double[][] lightRow) { + double [][] ret = lightRow; + + if (ret == null) { + // If we are allocating then use the same light vector for + // all entries. + ret = new double[width][]; + + double[] CL = new double[3]; + CL[0]=Lx; + CL[1]=Ly; + CL[2]=Lz; + + for(int i=0; iSheng Pei + * @version $Id: GammaTransfer.java 475477 2006-11-15 22:44:28Z cam $ + */ +public class GammaTransfer implements TransferFunction { + /** + * This byte array stores the lookuptable data + */ + public byte [] lutData; + + /** + * The amplitude of the Gamma function + */ + public float amplitude; + + /** + * The exponent of the Gamma function + */ + public float exponent; + + /** + * The offset of the Gamma function + */ + public float offset; + + /** + * Three floats as the input for the Gamma function + */ + public GammaTransfer(float amplitude, float exponent, float offset){ + this.amplitude = amplitude; + this.exponent = exponent; + this.offset = offset; + } + + /* + * This method will build the lut data. Each entry's + * value is in form of "amplitude*pow(C, exponent) + offset" + */ + private void buildLutData(){ + lutData = new byte [256]; + int j, v; + for (j=0; j<=255; j++){ + v = (int)Math.round(255*(amplitude*Math.pow(j/255f, exponent)+offset)); + if(v > 255){ + v = (byte)0xff; + } + else if(v < 0){ + v = (byte)0x00; + } + lutData[j] = (byte)(v & 0xff); + } + } + + + /** + * This method will return the lut data in order + * to construct a LookUpTable object + */ + public byte [] getLookupTable(){ + buildLutData(); + return lutData; + } +} Propchange: incubator/flex/sdk/branches/develop/modules/thirdparty/batik/sources/org/apache/flex/forks/batik/ext/awt/image/GammaTransfer.java ------------------------------------------------------------------------------ svn:eol-style = native