今天给大家实现的是Instagram中的Hudson滤镜,为什么介绍Instagram滤镜,原因很简单,Instagram本身就是一个巨大的成功,迄今为止,没有哪个软件的滤镜效果可以超越它的。
Hudson滤镜比较简单,主要是一个模板的寻找,这个模板,我也是在网上找到的,如果单单用PS去实现这个模板效果,我觉得我们是舍易取难,我们追求的是最后的效果,而不是过程呵呵。
首先看下对比效果:
(a) Instagram Hudson效果
(b) PS效果图
(c) C# 效果图
按照原则,先介绍PS实现过程:
1,打开原始图像以及模板图像,Instagram的目标效果图像:
其中,图层0为原始图像,图层1为模板图像(模板图像与psd文件一起,我都会放到包里供大家下载使用),另外的Hudson即Instagram中的效果图像。
2,选中图层1,选择“叠加”图层混合模式,即得到效果图:
然后,我们介绍C#实现:
按照PS的过程,C#代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace SpecialeffectDemo { unsafe class HudsonFilter { public HudsonFilter(Bitmap src,Bitmap bg_a) { this.srcBitmap = src; this.map = bg_a; } private Bitmap srcBitmap = null; private Bitmap map = null; public Bitmap Apply() { if (srcBitmap != null) { Bitmap src = new Bitmap(srcBitmap); int w = srcBitmap.Width; int h = srcBitmap.Height; BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); BitmapData mapaData = map.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); byte* p = (byte*)srcData.Scan0; byte* pa = (byte*)mapaData.Scan0; int r = 0, g = 0, b = 0; for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { b = p[0]; g = p[1]; r = p[2]; b = SpecialEffectClass.ModeSuperpositionEffect(b, pa[0]); g = SpecialEffectClass.ModeSuperpositionEffect(g, pa[1]); r = SpecialEffectClass.ModeSuperpositionEffect(r, pa[2]); p[0] = (byte)b; p[1] = (byte)g; p[2] = (byte)r; p += 4; pa += 4; } p += srcData.Stride - w * 4; pa += mapaData.Stride - w * 4; } src.UnlockBits(srcData); map.UnlockBits(mapaData); return src; } else { return null; } } } }
界面效果:
最后给出代码和PS实现过程的包,免费下载地址http://download.csdn.net/detail/trent1985/8177015
以上就是Hudson这款滤镜的实现过程,希望大家喜欢,有什么问题可以给我留言或者邮件:
邮箱[email protected] QQ:1358009172