All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.color.CompositeUtil Maven / Gradle / Ivy

There is a newer version: 20151002
Show newest version
/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/support/
 *
 * (C) Copyright 1997-2017 IDRsolutions and Contributors.
 *
 * This file is part of JPedal/JPDF2HTML5
 *
     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 2.1 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; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


 *
 * ---------------
 * CompositeUtil.java
 * ---------------
 */
package org.jpedal.color;

public class CompositeUtil {

    public static float composite(final float aS, final float aB, final float aR, final float cS, final float cB, final float blendRes) {
        final float ratioA = aS / aR;
        return (1 - ratioA) * cB + ratioA * ((1 - aB) * cS + aB * blendRes);
    }

    public static float unionBS(final float s, final float b) {
        return b + s - (b * s);
    }

    public static float findFR(final float fs, final float fb) {
        return unionBS(fs, fb);
    }

    public static float findQR(final float fs, final float fb, final float qs, final float qb) {
        return unionBS(fb * qb, fs * qs) / unionBS(fs, fb);
    }

    public static float blendMultiply(final float cS, final float cB) {
        return cB * cS;
    }

    public static float blendScreen(final float cS, final float cB) {
        final float kk = cB + cS - (cB * cS);
        return kk;
    }

    public static float blendOverLay(final float cS, final float cB) {
        return blendHardLight(cB, cS);
    }

    public static float blendDarken(final float cS, final float cB) {
        return Math.min(cS, cB);
    }

    public static float blendLighten(final float cS, final float cB) {
        return Math.max(cS, cB);
    }

    public static float blendColorDodge(final float cS, final float cB) {
        if (cS == 1) {
            return 1;
        } else {
            return Math.min(1, cB / (1 - cS));
        }
    }

    public static float blendColorBurn(final float cS, final float cB) {
        if (cS == 0) {
            return 0;
        } else {
            return 1f - Math.min(1, (1 - cB) / cS);
        }
    }

    public static float blendHardLight(final float cS, final float cB) {
        if (cS <= 0.5f) {
            return blendMultiply(cB, 2 * cS);
        } else {
            return blendScreen(cB, 2 * cS - 1);
        }
    }

    public static float blendSoftLight(final float cS, final float cB) {
        if (cS <= 0.5f) {
            return cB - (1 - 2 * cS) * cB * (1 - cB);
        } else {
            return cB + (2 * cS - 1) * (blendDX(cB) - cB);
        }
    }

    private static float blendDX(final float x) {
        if (x <= 0.25f) {
            return ((16 * x - 12) * x + 4) * x;
        } else {
            return (float) Math.sqrt(x);
        }
    }

    public static float blendDifference(final float cS, final float cB) {
        return Math.abs(cB - cS);
    }

    public static float blendExclusion(final float cS, final float cB) {
        return cB + cS - 2 * cB * cS;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy