• C# 将图片处理成各种效果图(转)


    原始图片: ISINBAEVA ~~~~~~~~

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

    代码实现:

    底片效果

    二. 浮雕效果

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

    效果图:

    代码实现:

    浮雕效果

    三. 黑白效果

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

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

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

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

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

    效果图:

    代码实现:

    黑白效果

    四. 柔化效果

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

    效果图:

    代码实现:

    柔化效果

    五.锐化效果

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

    效果图:

    实现代码:

    锐化效果

    六. 雾化效果

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

    效果图:

    实现代码:

    雾化效果

    七. 光照效果

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

    效果图:

    实现代码:

    光照效果

    八.百叶窗效果

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

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

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

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

    效果图:

        

    实现代码:

    垂直百叶窗
    水平百叶窗

    九.马赛克效果

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

    效果图:

    实现代码:

    马赛克效果

    十. 油画效果

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

    效果图:

    实现代码:

    油画效果

    十一: 扭曲效果

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

    效果图:

    实现代码:

    扭曲效果

    十二.积木效果

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

    效果图:

    实现代码:


    private void button1_Click(object sender, EventArgs e)
    {
    //以积木效果显示图像
    try
    {
    Graphics myGraphics
    = this.panel1.CreateGraphics ();
    //Bitmap myBitmap = new Bitmap(this.BackgroundImage);
    int myWidth, myHeight, i, j, iAvg, iPixel;
    Color myColor, myNewColor;
    RectangleF myRect;
    myWidth
    = MyBitmap.Width;
    myHeight
    = MyBitmap.Height;
    myRect
    = new RectangleF(0, 0, myWidth, myHeight);
    Bitmap bitmap
    = MyBitmap.Clone(myRect, System.Drawing.Imaging.PixelFormat.DontCare);
    i
    = 0;
    while (i < myWidth - 1)
    {
    j
    = 0;
    while (j < myHeight - 1)
    {
    myColor
    = bitmap.GetPixel(i, j);
    iAvg
    = (myColor.R + myColor.G + myColor.B) / 3;
    iPixel
    = 0;
    if (iAvg >= 128)
    iPixel
    = 255;
    else
    iPixel
    = 0;
    myNewColor
    = Color.FromArgb(255, iPixel, iPixel, iPixel);
    bitmap.SetPixel(i, j, myNewColor);
    j
    = j + 1;
    }
    i
    = i + 1;
    }
    myGraphics.Clear(Color.WhiteSmoke);
    myGraphics.DrawImage(bitmap,
    new Rectangle(0, 0, myWidth, myHeight));
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message,
    "信息提示");
    }
    }

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

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

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

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

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

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

  • 相关阅读:
    进程,线程,协程,异步IO知识点
    Socket网络编程知识点
    面向对象编程知识点
    Zabbix系列之七——添加磁盘IO监测
    WARNING: 'aclocal-1.14' is missing on your system.
    tomcat的catalina.out日志按自定义时间日式进行分割
    Plugin with id 'com.novoda.bintray-release' not found.的解决方案
    MaterialCalendarDialog【Material样式的日历对话框】
    导入项目报错【Minimum supported Gradle version is 3.3. Current version is 2.14.1】
    通过Calendar简单解析Date日期,获取年、月、日、星期的数值
  • 原文地址:https://www.cnblogs.com/holygis/p/1709988.html
Copyright © 2020-2023  润新知