原文:Win8 Metro(C#)数字图像处理--2.73一种背景图像融合特效

        /// <summary>
/// Image merge process.
/// </summary>
/// <param name="bacImage">The background image.</param>
/// <param name="dstImage">The source image.</param>
/// <param name="k">One parameter, from 0 to 1.</param>
/// <returns></returns>
public static WriteableBitmap ImageMerge(WriteableBitmap bacImage, WriteableBitmap dstImage, double k)
{
if (bacImage != null && dstImage != null)
{
int w = dstImage.PixelWidth;
int h = dstImage.PixelHeight;
int sw = bacImage.PixelWidth;
int sh = bacImage.PixelHeight;
WriteableBitmap srcImage = new WriteableBitmap(w, h);
byte[] dstValue = dstImage.PixelBuffer.ToArray();
byte[] bacValue = bacImage.PixelBuffer.ToArray();
byte[] tempValue = new byte[dstValue.Length];
int r = 0, g = 0, b = 0, R = 0, G = 0, B = 0;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
int tx = x % sw;
int ty = y % sh;
b = bacValue[tx * 4 + ty * w * 4];
g = bacValue[tx * 4 + 1 + ty * w * 4];
r = bacValue[tx * 4 + 2 + ty * w * 4];
B = dstValue[x * 4 + y * w * 4];
G = dstValue[x * 4 + 1 + y * w * 4];
R = dstValue[x * 4 + 2 + y * w * 4];
double xr = 0.0, xb = 0.0, xg = 0.0;
xr = ((double)r - ((double)R - (double)k * 255.0)) / (2.0 * 255.0 * k);
xg = ((double)g - ((double)G - (double)k * 255.0)) / (2.0 * 255.0 * k);
xb = ((double)b - ((double)B - (double)k * 255.0)) / (2.0 * 255.0 * k);
tempValue[x * 4 + y * w * 4] = (byte)(255.0 * (1.0 - 3.0 * xb * xb + 2.0 * xb * xb * xb));
tempValue[x * 4 + 1 + y * w * 4] = (byte)(255.0 * (1.0 - 3.0 * xg * xg + 2.0 * xg * xg * xg));
tempValue[x * 4 + 2 + y * w * 4] = (byte)(255.0 * (1.0 - 3.0 * xr * xr + 2.0 * xr * xr * xr));
}
}
Stream sTemp = srcImage.PixelBuffer.AsStream();
sTemp.Seek(0, SeekOrigin.Begin);
sTemp.Write(tempValue, 0, w * 4 * h);
return srcImage;
}
else
{
return null;
}
}

最后,分享一个专业的图像处理网站(微像素),里面有很多源代码下载:

Win8 Metro(C#)数字图像处理--2.73一种背景图像融合特效的更多相关文章

  1. Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化  [函数名称]   P分位法图像二值化 [算法说明]   所谓P分位法图像分割,就是在知道图像中目标所占的比率Rat ...

  2. Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化  [函数名称] 一维最大熵法图像二值化WriteableBitmap EntropymaxThSegment(Wr ...

  3. Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法

    原文:Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法 前面章节中介绍了二值图像的形态学算法,这里讲一下灰度图的形态学算法,主要是公式,代码略. 1,膨胀算法 2,腐蚀算法 3 ...

  4. Win8 Metro(C#)数字图像处理--4图像颜色空间描述

    原文:Win8 Metro(C#)数字图像处理--4图像颜色空间描述  图像颜色空间是图像颜色集合的数学表示,本小节将针对几种常见颜色空间做个简单介绍. /// <summary> / ...

  5. Win8 Metro(C#)数字图像处理--3.2图像方差计算

    原文:Win8 Metro(C#)数字图像处理--3.2图像方差计算 /// <summary> /// /// </summary>Variance computing. / ...

  6. Win8 Metro(C#)数字图像处理--3.3图像直方图计算

    原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...

  7. Win8 Metro(C#)数字图像处理--3.4图像信息熵计算

    原文:Win8 Metro(C#)数字图像处理--3.4图像信息熵计算 [函数代码] /// <summary> /// Entropy of one image. /// </su ...

  8. Win8 Metro(C#)数字图像处理--3.5图像形心计算

    原文:Win8 Metro(C#)数字图像处理--3.5图像形心计算 /// <summary> /// Get the center of the object in an image. ...

  9. Win8 Metro(C#)数字图像处理--3.1图像均值计算

    原文:Win8 Metro(C#)数字图像处理--3.1图像均值计算 /// <summary> /// Mean value computing. /// </summary> ...

随机推荐

  1. Android中HandlerThread的使用及源代码解析

    关于Hanlder的基本使用能够參见博文<Android中Handler的使用>,假设想了解Handler.Looper.Thread等的相互关系以及内部实现原理能够參见博文<深入源 ...

  2. 全栈JavaScript之路( 二十五 )訪问元素的样式

    不论什么支持style 特性的元素在 ,在其DOM  节点 对象中都有一个 style 属性与之相应. 这个style 对象是 CSSStyleDeclaration类型的实例,包括着html sty ...

  3. IT忍者神龟之Hibernat持久化对象-数据表映射配置回想

    1.持久化对象POJO编写规则: 1) 有空參public构造器: 2) 提供标识属性.映射数据表主键: 3) 属性提供setter和getter方法. 4) 属性使用基本数据类型的包装类型.基本类型 ...

  4. 数据库基本查询语句(SQL常用增删改查语句 简单复习 mark)

    SQL常用增删改查语句 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) ...

  5. 排序算法 基于Javascript

    写在前面 个人感觉:javascript对类似排序查找这样的功能已经有了很好的封装,以致于当我们想对数组排序的时候只需要调用arr.sort()方法,而查找数组元素也只需要调用indexOf()方法或 ...

  6. MOCHIWEB与COWBOY使用JSON

    http://4096.info/2014/05/28/mochiweb%E4%B8%8Ecowboy%E4%BD%BF%E7%94%A8json/ 服务器原来的socket实现机制更改为ranch了 ...

  7. Java堆/栈/常量池以及String的详细详解(转)------经典易懂系统

    一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...

  8. 从PHP到Node

    花12天时间,断断续续学了PHP和MySQL.学完PHP基础后,本以为很快就能做个中等项目,发现还是不行,可是是学习PHP的时间太短了吧,需要一定强度的练习,学新框架才行.PHP就先放一下吧,就当通过 ...

  9. Redis实战:如何构建类微博的亿级社交平台

    微博及 Twitter 这两大社交平台都重度依赖 Redis 来承载海量用户访问.本文介绍如何使用 Redis 来设计一个社交系统,以及如何扩展 Redis 让其能够承载上亿用户的访问规模. 虽然单台 ...

  10. Java--垃圾收集算法及内存分配策略

    本篇博客,主要介绍GC的收集算法以及根据算法要求所得的内存分配策略! 一.收集算法 收集算法,主要包括四种,分别是:Mark-Sweep(标记-清除).Copying(复制).Mark-Compact ...