Photoshop中图像混合模式有27种:正常、溶解、变暗、正片叠底、颜色加深、线性加深、深色、变亮、滤色、颜色减淡、线性减淡、浅色、叠加、柔光、强光、亮光、线性光、点光、实色混合、差值、排除、减去、划分、色相、饱和度、颜色、明度。本文给出Java代码实现。 公式:基色 + (混合色 * 基色) / (255 - 混合 ..

两张图片颜色减淡混合

本贴最后更新于 2411 天前,其中的信息可能已经时过境迁

    Photoshop中图像混合模式有27种:正常、溶解、变暗、正片叠底、颜色加深、线性加深、深色、变亮、滤色、颜色减淡、线性减淡、浅色、叠加、柔光、强光、亮光、线性光、点光、实色混合、差值、排除、减去、划分、色相、饱和度、颜色、明度。本文给出Java代码实现。

    公式:基色 + (混合色 * 基色) / (255 - 混合色),若为彩色图像需分别处理各个通道。

    

	// C =MIN( A +(A×B)/(256-B),255)
	public BufferedImage deceaseColorCompound(final BufferedImage sourceImage,
			final BufferedImage targetImage) {
		final int width = sourceImage.getWidth() > targetImage.getWidth() ? sourceImage
				.getWidth() : targetImage.getWidth();
		final int height = sourceImage.getHeight() > targetImage.getHeight() ? sourceImage
				.getHeight() : targetImage.getHeight();
		final BufferedImage retImage = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_ARGB);
		for (int i = 0; i < width; i++) {
			for (int j = 0; j < width; j++) {
				if(i>=sourceImage.getWidth() || j>=sourceImage.getHeight()){
					if(i>=targetImage.getWidth() || j>=targetImage.getHeight()){
						retImage.setRGB(i, j, 0);
						continue;
					}
					retImage.setRGB(i, j, targetImage.getRGB(i, j));
					continue;
				}
				if(i>=targetImage.getWidth() || j>=targetImage.getHeight()){
					retImage.setRGB(i, j, sourceImage.getRGB(i, j));
					continue;
				}
			final int color1 = sourceImage.getRGB(i, j);
			final int color2 = targetImage.getRGB(i, j);

			final int a1 = (color1 &gt;&gt; 24) &amp; 0xff;
			final int r1 = (color1 &gt;&gt; 16) &amp; 0xff;
			final int g1 = (color1 &gt;&gt; 8) &amp; 0xff;
			final int b1 = color1 &amp; 0xff;

			final int a2 = (color2 &gt;&gt; 24) &amp; 0xff;
			final int r2 = (color2 &gt;&gt; 16) &amp; 0xff;
			final int g2 = (color2 &gt;&gt; 8) &amp; 0xff;
			final int b2 = color2 &amp; 0xff;

			final int a = deceaseColorChannel(a1, a2);
			final int r = deceaseColorChannel(r1, r2);
			final int g = deceaseColorChannel(g1, g2);
			final int b = deceaseColorChannel(b1, b2);

			final int result = (a &lt;&lt; 24) | (r &lt;&lt; 16) | (g &lt;&lt; 8) | b;
			retImage.setRGB(i, j, result);
		}
	}
	return retImage;
}

// C =MIN( A +(A&times;B)/(256-B),255)
private int deceaseColorChannel(final int source, final int target) {
	final int result = source + source * target / (256 - target);
	return result &gt; 255 ? 255 : result;
}


    图一:

     photo 9755c44c4c3511162cbeac2393dd1a7e_zps2cf32894.jpg

    图二:

     photo in_zps340a5bfc.jpg

    source->图一,target->图二:

     photo compound1_zpscba29b7e.png

    source->图二,target->图一:

     photo compound_zps2812fb6e.png

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2295 引用 • 7752 回帖 • 907 关注
  • 图像处理
    7 引用 • 9 回帖
  • 颜色减淡混合
    1 引用 • 1 回帖
1 回帖   
请输入回帖内容...
  • Armstrong API  

    写错了个变量,更新一下。[em06]