/* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. */ package com.jpexs.decompiler.flash.types; import com.jpexs.decompiler.flash.types.filters.Filtering; import com.jpexs.helpers.SerializableImage; import java.awt.Color; import java.awt.image.RescaleOp; /** * * @author JPEXS */ public class ColorTransform implements Cloneable { public RescaleOp toRescaleOp() { return new RescaleOp(new float[]{getRedMulti() / 256f, getGreenMulti() / 256f, getBlueMulti() / 256f, getAlphaMulti() / 256f}, new float[]{getRedAdd(), getGreenAdd(), getBlueAdd(), getAlphaAdd()}, null); } public SerializableImage apply(SerializableImage src) { return Filtering.colorEffect(src, getRedAdd(), getGreenAdd(), getBlueAdd(), getAlphaAdd(), getRedMulti(), getGreenMulti(), getBlueMulti(), getAlphaMulti()); } public int apply(int color) { return Filtering.colorEffect(color, getRedAdd(), getGreenAdd(), getBlueAdd(), getAlphaAdd(), getRedMulti(), getGreenMulti(), getBlueMulti(), getAlphaMulti()); } public RGB apply(RGB color) { if (color == null) { return null; } return new RGBA(Filtering.colorEffect(color.toInt(), getRedAdd(), getGreenAdd(), getBlueAdd(), getAlphaAdd(), getRedMulti(), getGreenMulti(), getBlueMulti(), getAlphaMulti())); } public RGBA apply(RGBA color) { if (color == null) { return null; } return new RGBA(Filtering.colorEffect(color.toInt(), getRedAdd(), getGreenAdd(), getBlueAdd(), getAlphaAdd(), getRedMulti(), getGreenMulti(), getBlueMulti(), getAlphaMulti())); } public Color apply(Color color) { if (color == null) { return null; } return new Color(Filtering.colorEffect(color.getRGB(), getRedAdd(), getGreenAdd(), getBlueAdd(), getAlphaAdd(), getRedMulti(), getGreenMulti(), getBlueMulti(), getAlphaMulti())); } public GRADRECORD[] apply(GRADRECORD[] gradRecords) { GRADRECORD[] ret = new GRADRECORD[gradRecords.length]; for (int i = 0; i < gradRecords.length; i++) { GRADRECORD r = gradRecords[i]; GRADRECORD r2 = new GRADRECORD(); r2.inShape3 = r.inShape3; r2.ratio = r.ratio; r2.color = apply(r.color); ret[i] = r2; } return ret; } public int getRedAdd() { return 0; } public int getGreenAdd() { return 0; } public int getBlueAdd() { return 0; } public int getAlphaAdd() { return 0; } public int getRedMulti() { return 256; } public int getGreenMulti() { return 256; } public int getBlueMulti() { return 256; } public int getAlphaMulti() { return 256; } public ColorTransform merge(final ColorTransform c) { final ColorTransform t = this; return new ColorTransform() { @Override public int getRedAdd() { return (t.getRedAdd() + c.getRedAdd()); } @Override public int getGreenAdd() { return (t.getGreenAdd() + c.getGreenAdd()); } @Override public int getBlueAdd() { return (t.getBlueAdd() + c.getBlueAdd()); } @Override public int getAlphaAdd() { return (t.getAlphaAdd() + c.getAlphaAdd()); } @Override public int getRedMulti() { return (int) ((float) t.getRedMulti() / 256f * c.getRedMulti()); } @Override public int getGreenMulti() { return (int) ((float) t.getGreenMulti() / 256f * c.getGreenMulti()); } @Override public int getBlueMulti() { return (int) ((float) t.getBlueMulti() / 256f * c.getBlueMulti()); } @Override public int getAlphaMulti() { return (int) ((float) t.getAlphaMulti() / 256f * c.getAlphaMulti()); } }; } @Override public String toString() { return "[colorTransform redAdd=" + getRedAdd() + ", greenAdd=" + getGreenAdd() + ", blueAdd=" + getBlueAdd() + ", alphaAdd=" + getAlphaAdd() + ", redMulti=" + getRedMulti() + ", greenMulti=" + getGreenMulti() + ", blueMulti=" + getBlueMulti() + ", alphaMulti=" + getAlphaMulti() + "]"; } @Override public ColorTransform clone() { try { return (ColorTransform) super.clone(); } catch (CloneNotSupportedException ex) { throw new RuntimeException(); } } }