代码改变世界

C#超酷的图像效果(转)

2009-12-17 15:20  xiaosuo  阅读(1552)  评论(3编辑  收藏  举报

如果您觉得C#制作的艺术字比较好玩, 但是还觉得没看够,不过瘾,那么我今天就让您一饱眼福, 看看C#如何制作的效果超酷的图像.

(注: 我之前曾写过类似的文章, 但没有原理说明, 代码注释不够详细, 也没有附相应的 Demo...因此如果您觉得好像哪看过类似的文章可以看看我之前写的...)

 

为了演示后面的效果, 这里有必要先让大家看看今天的原始图片: ISINBAEVA ~~~~~~~~

 

一. 底片效果
原理: GetPixel方法获得每一点像素的值, 然后再使用SetPixel方法将取反后的颜色值设置到对应的点.
效果图:

代码实现:

底片效果

 

二. 浮雕效果

原理: 对图像像素点的像素值分别与相邻像素点的像素值相减后加上128, 然后将其作为新的像素点的值.

效果图:

代码实现:

浮雕效果

 

三. 黑白效果

原理: 彩色图像处理成黑白效果通常有3种算法;

(1).最大值法: 使每个像素点的 R, G, B 值等于原像素点的 RGB (颜色值) 中最大的一个;

(2).平均值法: 使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值;

(3).加权平均值法: 对每个像素点的 R, G, B值进行加权

    ---自认为第三种方法做出来的黑白效果图像最 "真实".

效果图:

代码实现:

黑白效果

 

四. 柔化效果

原理: 当前像素点与周围像素点的颜色差距较大时取其平均值.

效果图:

代码实现:

柔化效果

 

五.锐化效果

原理:突出显示颜色值大(即形成形体边缘)的像素点.

效果图:

实现代码:

锐化效果

 

六. 雾化效果

原理: 在图像中引入一定的随机值, 打乱图像中的像素值

效果图:

实现代码:

雾化效果

 

七. 光照效果

原理: 对图像中的某一范围内的像素的亮度分别进行处理.

效果图:

实现代码:

光照效果

 

八.百叶窗效果

原理:(1).垂直百叶窗效果:

根据窗口或图像的高度或宽度和定制的百叶窗显示条宽度计算百叶窗显示的条数量 ;

根据窗口或图像的高度或宽度定制百叶窗显示条数量计算百窗显示的条宽度.

(2).水平百叶窗效果: 原理同上,只是绘制像素点开始的坐标不同.

效果图:

    

实现代码:

垂直百叶窗

 

水平百叶窗

 

九.马赛克效果

原理: 确定图像的随机位置点和确定马赛克块的大小,然后马赛克块图像覆盖随机点即可.

效果图:

实现代码:

马赛克效果

 

十. 油画效果

原理: 对图像中某一范围内的像素引入随机值.

效果图:

实现代码:

油画效果

 

十一: 扭曲效果

原理: 将图像缩放为一个非矩形的平等四边形即可

效果图:

实现代码:

扭曲效果

 

十二.积木效果

原理: 对图像中的各个像素点着重(即加大分像素的颜色值)着色.

效果图:

实现代码:

积木效果

 

说明.这些大多为静态图. 后面会有图像的动态显示. 如分块合成图像, 四周扩散显示图像, 上下对接显示图像等.

      这些也许能说明一下 PPT或者手机中的图片效果处理程序是如果做出来的.原理应该是相通的.

      制作图像一般常用的类有: Bitmap; Graphics; Rectangle;Color; 用到的方法是 Graphics类的DrawImage;

      此方法共有30个版本, 我习惯用 DrawImage("图像", "图框") 版本.

      因为这个版本的思想是最简单的----把一张**地图像装在一个**地框里! (**代表某种效果的图像和某种效果的框)

      如. g.DrawImage(new Bitmap("myPicture"), new Rectangle(0, 0, myWidth, myHeight));

      呵呵, 到此

     希望对大家有所帮助.