上面有一篇提到了图片明暗的调整,其原理是每个象素的三个颜色分量同时增加或减少一个固定的值。现在更进一步,假如每个象素三个分量增加或减少的值不是相同的呢?嗯,这就今天要讨论的主题了。

应该很容易想明白,假如我们需要一张照片偏红一点,那只需要每个象素的红色分量值都增加就可以了。举个更实际一点的场景,比如要把一张鲜艳的彩色照片处理成泛棕的老旧黑白照,最简单的一个方法就是先把它处理成256级灰阶图,然后增加每个象素的红色分量。

老规矩,给出函数。

        /**//// <summary>
        /// 色彩调整
        /// </summary>
        /// <param name="bmp">原始图</param>
        /// <param name="rVal">r增量</param>
        /// <param name="gVal">g增量</param>
        /// <param name="bVal">b增量</param>
        /// <returns>处理后的图</returns>
        public static Bitmap KiColorBalance(Bitmap bmp, int rVal, int gVal, int bVal)
        ...{

            if (bmp == null)
            ...{
                return null;
            }


            int h = bmp.Height;
            int w = bmp.Width;

            try
            ...{
                if (rVal > 255 || rVal < -255 || gVal > 255 || gVal < -255 || bVal > 255 || bVal < -255)
                ...{
                    return null;
                }

                BitmapData srcData = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                unsafe
                ...{
                    byte* p = (byte*)srcData.Scan0.ToPointer();

                    int nOffset = srcData.Stride - w * 3;
                    int r, g, b;

                    for (int y = 0; y < h; y++)
                    ...{
                        for (int x = 0; x < w; x++)
                        ...{

                            b = p[0] + bVal;
                            if (bVal >= 0)
                            ...{
                                if (b > 255) b = 255;
                            }
                            else
                            ...{
                                if (b < 0) b = 0;
                            }

                            g = p[1] + gVal;
                            if (gVal >= 0)
                            ...{
                                if (g > 255) g = 255;
                            }
                            else
                            ...{
                                if (g < 0) g = 0;
                            }

                            r = p[2] + rVal;
                            if (rVal >= 0)
                            ...{
                                if (r > 255) r = 255;
                            }
                            else
                            ...{
                                if (r < 0) r = 0;
                            }

                            p[0] = (byte)b;
                            p[1] = (byte)g;
                            p[2] = (byte)r;

                            p += 3;
                        }

                        p += nOffset;


                    }
                } // end of unsafe

                bmp.UnlockBits(srcData);

                return bmp;
            }
            catch
            ...{
                return null;
            }

        } // end of color

C#图片处理之:色彩调整相关推荐

  1. vb不能插入png图片_第16节-图片 | 剑雨Axure RP9系列「基础」

    图片 前面的话:图片这个元件可能是原型设计中使用频率最高的一个了.在AXURE中支持的图片格式有 JPG,PNG,GIF,BMP和SVG. 图片的添加 图片的添加有多种方法,如下: 从元件库中拖入 这 ...

  2. 图片的水印怎么去除?这几种图片去水印方法很简单

    图片的水印怎么去除掉呢?去除图片水印可以让图片看起来更加美观和专业.对于设计师.广告人员.网站管理员等,他们通常需要使用高质量的图片来制作宣传材料或网站内容.但是,当他们在网上搜寻图片时,很多图片都带 ...

  3. 如何理解照片后期处理

    很多摄影爱好者都面临着一个共同的问题,在摄影中遇到光线.天气.场景.构图等原因,拍摄的作品不能达到自己预期的效果.如何解决这个问题,是每位摄影爱好者最纠结的.当今社会是个数码飞速发展的时代,这样很多摄 ...

  4. MB525 系统软件说明

    [大百科]白鸽带你弄清楚Atrix 4G所有自带系统程序都是做什么的[精简参考的绝佳教程] 版权声明:本文的所有软件功能皆由白鸽男孩逐一分析每个程序的源代码得出结论,因此详尽程度非同一般.网上如有雷同 ...

  5. paintkeep未能连接到服务器,Paintkeep

    Paintkeep安卓版是一款将您的照片变成水彩画的客户端应用,Paintkeep识别效果非常的强,多种画风随您选择,还能再在照片中添加编辑,签上您的亲笔签名. 功能介绍 *10型水彩画预设. *使用 ...

  6. OpenGL ES 之 LUT(滤镜基准图)

    前言 Look Up Table(简称LUT,查找表).输入一个值,然后通过查找表来得到一个输出值. 在调色领域中,称为颜色查找表,查找表的分量为R.G.B,是一种降低GPU运算量的技术,通过将颜色值 ...

  7. 图片编辑软件分享!图片编辑软件大合集。​

    图片编辑软件分享!图片编辑是指通过使用专业的图片处理软件和工具,对数字图像进行各种修改和调整的过程.这些修改和调整可以包括裁剪.旋转.缩放.色彩校正.添加特效或文本等操作,以达到美化.改善或修复图片的 ...

  8. 两行 CSS 代码实现图片任意颜色赋色技术

    很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方法可以实现,又或者不仅仅局限于 PNG 图片. mix-b ...

  9. 图片饱和度_摄影后期完全调色指南(三):饱和度与自然饱和度有什么区别?...

    泼辣年度大课 | 摄影后期完全调色指南(一) 摄影后期完全调色指南(二):详解色温与色调 在上一篇教程里面我们讲到了全局色彩调整中的色温和色调工具,今天来讲解剩下的两个工具:饱和度与自然饱和度工具,这 ...

最新文章

  1. 这才是真的码“农”!Linux基金会要推广开源技术种菜了
  2. Android 抓包的一些命令 及 adb使用的一些注意事项
  3. C++构造函数之委托构造函数
  4. 【MySQL】Mysql索引优化与底层数据结构深入剖析 - 笔记
  5. LOJ.2718.[NOI2018]归程(Kruskal重构树 倍增)
  6. C#反射机制详解(转)
  7. springboot热部署与发布
  8. [数据模型] 数据表三种关联的概述
  9. atitit.二维码生成总结java zxing
  10. java程序开发的流程_Java程序开发流程(图文解说版)
  11. Visual studio插件:Visual Svn 替代工具--AnkhSvn
  12. 嵌入式和单片机的区别
  13. ziheng -接小球游戏
  14. 大数据电信客服项目一——数据生成
  15. 微信如何开通直播?开通方法有2种
  16. GAMES202 笔记 -Real-Time Ray-Tracing
  17. AD ADSI入门
  18. C语言零基础学习日记
  19. C语言二进制求数集子集
  20. layui数据表格中导出所有数据的简易解决办法

热门文章

  1. class构造函数实现接口数据整合
  2. 错误 -source 1.6 中不支持 diamond 运算符的解决办法(已解决)
  3. 伪元素选择器使用场景2-仿土豆网显示隐藏遮罩案例(CSS3)
  4. 实验4-1-8 求给定精度的简单交错序列部分和 (15 分)
  5. 一维卷积神经网络_人人都能看得懂的卷积神经网络——入门篇
  6. 接触网作业车司机许新峰的春运
  7. Python全栈开发之Django基础
  8. Windows Terminal 窗口/控制台切换快捷键总结
  9. TypeError: keys must be str, int, float, bool or None, not tuple,解决 python 中 json 保存不了字典键值为 元组 的问题
  10. APM终端用户体验监控分析(下)