zoukankan      html  css  js  c++  java
  • Atitit blend mode COLOR_DODGE 混合模式  “颜色减淡”模式

     Atitit blend mode COLOR_DODGE 混合模式  “颜色减淡”模式

     

     

     

    1.1. 混合模式是图像处理技术中的一个技术名词1

    1.2. 目录1

    1.3. 颜色减淡COLOR_DODGE的公式如下2

    1.4. 详细解释及原理3

    1.5. 使用javafx 类库实现图像叠加混合3

    1.6. 代码实现 /AtiPlatf_cms/src/com/attilax/img/ImageBlendFilter.java4

     

    1.1. 混合模式是图像处理技术中的一个技术名词

    ,不仅用于广泛使用的Photoshop中,也应用于AfterEffectllustrator DreamweaverFireworks等软件。主要功效是可以用不同的方法将对象颜色与底层对象的颜色混合。当您将一种混合模式应用于某一对象时,在此对象的图层或组下方的任何对象上都可看到混合模式的效果。

    1.2. 目录

    00001. 1 详细解释及原理

    00002. 2 通常

    00003.  正常模式(Normal

    00004.  溶解模式(Dissolve)

    00005.  背后模式(Behind)

    00006.  清除模式(Clear)

    00007. 3 变暗系

    00008.  变暗模式(Darken)

    00009.  正片叠底(Multiply)

    00010.  颜色加深模式(Color Burn)

    00011.  线性加深模式(Linear Burn)

    00001.  深色模式(Darker Color)

    00002. 4 变亮系

    00003.  增加模式(Add)

    00004.  变亮模式(Lighten)

    00005.  滤色模式(Screen)

    00006.  颜色减淡模式(Color Dodge)

    00007.  线性减淡模式(Linear Dodge)

    00008.  浅色模式(Lighter Color)

    00009. 5 饱和度系

    00010.  叠加模式(Overlay)

    00001.  柔光模式(Soft Light)

    00002.  强光模式(Hard Light)

    00003.  亮光模式(Vivid Light)

    00004.  线性光模式(Linear Light)

    00005.  点光模式(Pin Light)

    00006.  实色混合模式(Hard Mix)

    00007. 6 差集系

    00008.  差值模式(Difference)

    00001.  排除模式(Exclusion)

    00002.  减去模式(Subtract)

    00003.  划分模式(Divide)

    00004. 7 颜色系

    00005.  色相模式(Hue)

    00006.  饱和度模式(Saturation)

    00007.  颜色模式(Color)

    00008.  亮度模式(Luminosity)

     

     

    1.3. 颜色减淡COLOR_DODGE的公式如下

    P(x,y) = Pb(x,y) + (Pb(x,y)* Pc(x,y)) / (256 - Pc(x,y));

     

    C =MIN( A +(A×B)/(255-B),255)

    255-B)就是得到b的反相

    既然知道了算法,现在开始代码:

    A为原图gray图, b为上层图片,即是灰度图反相底片高斯模糊后的图片

    C的最大值为255,如果超出要截取到255,否则会脸部变黑色。。如果b255,则除磷错误,需要直接返回255即可

     

     

    1.4. 详细解释及原理

    编辑

    以画笔工具为例说明其原理。

    任意打开一幅图,选择画笔工具,选择合适的笔刷。设定不同的模式在图像上绘画,即可得到不同的效果。

    为了叙述方便,暂且将原图像中的颜色称之为底色A画笔的颜色为绘图色B,将通过混合模式得到的最后颜色称为最终色

     

     

     

    “颜色减淡”模式的公式是:基色+(基色*混合色)/255-混合色)= 结果色,其中(255-混合色)当于混合色的反相。

    1、若混合色为0(黑色),则由于(基色*混合色)这项为0,则结果色等于基色,图像不发生变化;基混合色为128(50%的黑),情况分为两种:

    1)当基色小于128时,结果色等于2基色,由于这个数值小于255所以呈某种阶调的灰。

    2)而当基色大于128(50%的黑)时,结果色等于2基色,这个值是大于255值,255(白色)

    2、若混合色为255(白色),则混合色的反相为0,无论基色为何值,结果色都大于255,归为255(白色)。

     

    1.5. 使用javafx 类库实现图像叠加混合

    public static BufferedImage blend_COLOR_DODGE(String topImg,

     

    String lowImg) {

    javafx.scene.image.Image topimg_jfxfmt = toImg(topImg);

     

    javafx.scene.image.Image lowImg_jfxFmt = toImg(lowImg);

     

    Blend blend = new Blend(BlendMode.COLOR_DODGE);

    blend.setTopInput(new ImageInput(topimg_jfxfmt));

    blend.setBottomInput(new ImageInput(lowImg_jfxFmt));

     

    Group grp = new Group();

     

    grp.setEffect(blend);

     

    //WritableImage img = new WritableImage((int) topimg_jfxfmt.getWidth(),

    //(int) topimg_jfxfmt.getHeight());

    // scene.snapshot(img);

    WritableImage img2 = grp.snapshot(new SnapshotParameters(), null);

     

    //StackPane root = javafxUtil.getStackPaneFrmImg(img2);

     

    BufferedImage copy2 =  SwingFXUtils.fromFXImage(img2, null);

    copy2 = imgx.Remove_alpha_channel(copy2);

    return copy2;

    }

    1.6. 代码实现 /AtiPlatf_cms/src/com/attilax/img/ImageBlendFilter.java

     BufferedImage copy2=new ImageBlendFilter().setBlendMode(ImageBlendFilter.COLOR_DODGE)

     .setSecondImage(Gaussiancopy ).filter( gray_copy     , null);

     

    Guass avbove on gray pic..gray pic is blow lev..

     

    // 暂且将原图像中的颜色称之为“底色A”画笔的颜色为“绘图色B”,将

    //base ori is a, push pen is b

    //yaosi fangfe ,zo div zeor ex..

    //  ,公式为:

    //C =MIN( A +(A×B)/(255-B),255)

    /**

     * b = guassBlur[index];

                    a = gray[index];

                    。颜色减淡的算法是这样的:C =MIN( A +(A×B)/(255-B),255),其中C为混合结果,A为源像素点,B为目标像素点。

     * @param b

     * @param a

     * @return  其中(255-混合色)当于混合色的反相。

     */

    private int modeCOLOR_DODGE(int a, int b) {

    if (b >= 255)

    return 255;

    //if (b < 128)

    //System.out.println("Dbg");

    if(a<128)

    System.out.println("dg");

    //try {

    float rzt = (float)a + (float)(a * b) /(float) (255 - b);

    int clr = (int) rzt;

    if (clr > 255)

    return 255;

    return clr;

     

     

    // MIN(clr,255);

    }

     

    作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

    汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

    转载请注明来源: http://www.cnblogs.com/attilax/

    Atiend

     

  • 相关阅读:
    wm
    usual
    itk_option remove
    Label Options
    imosflm controller
    set font
    namespace code
    git 之五分钟教程
    git 之五分钟教程
    学习perl正则表达式
  • 原文地址:https://www.cnblogs.com/attilax/p/6037098.html
Copyright © 2011-2022 走看看