图像处理------透明混合 - Alpha Blending效果

基本原理:

图像的透明混合有个专属名词– Alpha Blending

 

对任意两张图像可以合成为一张图像,合成图像的像素取值根据数学公式:

RGB3 = (1- a) * RGB1 + a * RGB2

其中a为混合透明度取值范围[0, 1]之间, RGB3为目标像素值, RGB1与RGB2的值分别来自两

张不同的图像。

两张源图像分别为:

第二张源图像是房屋设计图

三:最终程序效果如下

四:程序关键代码及解释

获取BufferedImage对象中像素数据的代码如下:

[java] view plaincopy

  1. public void getRGB(BufferedImage img, int x, int y, int width, int height, int[] pixelsData) {  
  2.         int type = img.getType();  
  3.         if (type == BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB) {  
  4.             img.getRaster().getDataElements(x, y, width, width, pixelsData);  
  5.         } else {  
  6.             img.getRGB(x, y, width, height, pixelsData, 0, img.getWidth());  
  7.         }  
  8.     }  

将处理后的像素数组写到新创建的BufferedImage对象中的代码如下:

[java] view plaincopy

  1. public void setRGB(BufferedImage img, int x, int y, int width, int height, int[] pixelsData) {  
  2.         int type = img.getType();  
  3.         if (type == BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB) {  
  4.             img.getRaster().setDataElements(x, y, width, height, pixelsData);  
  5.         } else {  
  6.             img.setRGB(x, y, width, height, pixelsData, 0, width);  
  7.         }  
  8.     }  

创建一个新BufferedImage对象代码如下:

[java] view plaincopy

  1. alphaBlendingImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);  

实现Alpha Blending的代码如下:

[java] view plaincopy

  1. float blendingRate = 0.5f;  
  2.     private void processPixels(int[] inPixelsOne, int[] inPixelsTwo, int[] outPixelsData, int width, int height) {  
  3.         int index = 0;  
  4.         for(int row=0; row<height; row++) {  
  5.             for(int col=0; col<width; col++) {  
  6.                 int ta = 0, tr = 0, tg = 0, tb = 0;  
  7.                 int rgb1 = inPixelsOne[index];  
  8.                 int rgb2 = inPixelsTwo[index];  
  9.                 ta = ((rgb1 >> 24) & 0xff) + ((rgb2 >> 24) & 0xff);  
  10.                 tr = ((rgb1 >> 16) & 0xff) + ((rgb2 >> 16) & 0xff);  
  11.                 tg = ((rgb1 >> 8) & 0xff) + ((rgb2 >> 8) & 0xff);  
  12.                 tb = (rgb1 & 0xff) + (rgb2 & 0xff);  
  13.                   
  14.                 int a = 0, r=0, g=0, b=0;  
  15.                 a = (int)(blendingRate *(float)ta);  
  16.                 r = (int)(blendingRate *(float)tr);  
  17.                 g = (int)(blendingRate *(float)tg);  
  18.                 b = (int)(blendingRate *(float)tb);  
  19.                   
  20.                 outPixelsData[index] = ((a << 24) & 0xFF000000)  
  21.                 | ((r << 16) & 0x00FF0000)  
  22.                 | ((g << 8) & 0x0000FF00)  
  23.                 | ((b) & 0x000000FF);  
  24.                 index++;  
  25.             }  
  26.         }  
  27.           
  28.     }  

本例中,为了简化计算假设alpah blending系数为0.5

加载/读取图像文件的代码如下:

[java] view plaincopy

  1. if (srcImageOne == null) {  
  2.     File file_001 = new File("D:\\resource\\350_001.png");  
  3.     srcImageOne = ImageIO.read(file_001);  
  4. }  
  5. if (srcImageTwo == null) {  
  6.     File file_002 = new File("D:\\resource\\350_002.png");  
  7.     srcImageTwo = ImageIO.read(file_002);  
  8. }  
时间: 2024-08-03 17:11:33

图像处理------透明混合 - Alpha Blending效果的相关文章

Illustrator仿照photoshop蒙版绘制漂亮透明变化的月亮效果教程

给各位Illustrator软件的使用者们来详细的解析分享一下仿照photoshop蒙版绘制漂亮透明变化的月亮效果的教程. 教程分享: 1-在深色图形上方画圆形.   2-"透明面板"和PS相似 也有混和方式和透明度的调节现在的白方块是当前选中的物体(实际里面是上述白色的圆形).   3-点右上角三角符号,开始制作蒙版.   4-出现如同PS一样的蒙版 蒙版的原理也是白色显示当前图形的颜色 黑色遮挡当前图形的颜色同理不同的灰色即是不同程度的透明.   5-点击右侧蒙版 看到蒙版方块出现

UILabel混合显示动画效果

UILabel混合显示动画效果   效果   源码 https://github.com/YouXianMing/Animations // // MixedColorProgressViewController.m // Animations // // Created by YouXianMing on 16/1/5. // Copyright 2016年 YouXianMing. All rights reserved. // #import "MixedColorProgressView

photoshop制作冲出水面的透明液体水马效果教程

给各位photoshop软件的使用者们来详细的解析分享一下制作冲出水面的透明液体水马效果的教程. 教程分享: 1.PS打开下面的马素材,如图1.     <图1> 2.进入通道面板,把蓝色通道复制一份,得到蓝副本通道,如下图.   <图2> 3.按Ctrl + I 把蓝副本通道反相,得到下图所示的效果.   <图3> 4.选择菜单:滤镜 > 模糊 > 高斯模糊,数值为8,效果如图6.   <图4>   <图5>   <图6>

Photoshop制作透明的液体水人效果后期教程

给各位Photoshop软件的使用者们来详细的解析分享一下制作透明的液体水人效果的后期教程. 教程分享: 最终效果   原图   1.打开原图,把人物抠出来,分别复制2层,命名为MM1 和 MM2,MM1 层在MM2 层上面,关闭 MM2层的眼睛待用,原背景图层也隐藏.   2.对MM1层执行:滤镜 > 艺术效果 > 塑料包装,数值为:20/8/6,效果如下图.   3.新建渐变映射调整层,选择和湖水接近的3种深浅不同的蓝色,从上往下拉线性渐变.   4.对MM2 层按Ctrl + Shift

PhotoShop制作透明质感塑料字效果教程

ps教程学习如何用photoshop制作透明质感塑料字效,高光质感比较强,主要用到了图层样式. 先看效果图: 新建文档680x500像素,背景白色,百度随便搜一个纹理,拖入文档中作为背景. 输入白色字母ps,尺寸540点,字体CommercialScript BT,字体下载 3个文字层的填充都归零,选择ps层添加样式. 我们会得到下图效果. 选择中间的ps层. 添加图层样式. 分类: PS文字教程

PhotoShop图层样式制作透明质感玻璃文字效果教程

这是一个简单的字效教程,之前透明字效果的教程也有一些,这种效果也有些像陶瓷质感,一般制作字效都离不开图层样式的设置, 喜欢的话你可以试试,用时只需要15分钟. 教程效果图: 注:PS图层混合模式的中英文对照 Step 1新建白色文档 Step 2背景设置如下 相关教程: Photoshop制作破碎裂纹的玻璃文字 PS制作质感玻璃字 Photoshop制作漂亮的透视玻璃立体字 PhotoShop图层样式制作透明玻璃字体效果教程 分类: PS文字教程

图像处理------简单数字水印 - 文字轧花效果

首先看一下效果,左边是一张黑白的文字图像,右边是混合之后的数字水印效果   实现原理 主要是利用位图块迁移算法,首先提取文字骨架,宽度为一个像素.然后将提取的骨架,按 照一定的像素值填充到目标图像中即可.关于位图块迁移算法说明请看这里: http://en.wikipedia.org/wiki/Bit_blit   程序思路: 1.      首先创建两张白板的单色位图,读入黑白文字图片, 2.      移动一个像素位开始读取文字图片中的像素,将每个对应像素与白板单色图片叠加,直 至黑白文字图

最大化混合云解决方案效果的诀窍

虽然云计算成为了很多企业的有效解决方案,但仍有许多人尚未完全将其IT外包到云服务中.这就是为什么许多企业会选择切换至混合云解决方案:将私有的IT基础设施和公有云混合在一起使用.这样一来,他们觉得既能控制其运营的重要方面,同时还能获得软件即服务或平台即服务所附带的大多数优势.这一点对制造企业尤为明显,制造业传统的企业资源规划系统升级可能需要花费普通情况更多的时间.当然,一旦他们将云部署到位,就可以有很多方式来开发他们的解决方案,从而更好地满足其业务需求. 借助虚拟化终止重复工作 改进这种系统的一种

jquery win 7透明弹出层效果的简单代码_jquery

复制代码 代码如下:  $("#firefoxicon").click(function() {       $("#window1").chinaz({             windowtitle:          "firefox",             windowpositiontop:    "center",             windowpositionleft:   "center&q