您的位置:首页 > 其它

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

2016-11-07 02:46 681 查看
 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中,也应用于AfterEffect、llustrator
、 Dreamweaver、
Fireworks等软件。主要功效是可以用不同的方法将对象颜色与底层对象的颜色混合。当您将一种混合模式应用于某一对象时,在此对象的图层或组下方的任何对象上都可看到混合模式的效果。

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,否则会脸部变黑色。。如果b是255,则除磷错误,需要直接返回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://blog.csdn.net/attilax

Atiend

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: