Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法

简介: 原文:Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法  [函数名称]   部分彩色保留函数       WriteableBitmap PartialcolorProcess(WriteableBitmap src,int rValue,int gValue,int bValue) [算法说明]   这个算法有多种,可以基于RGB,HSV等多种颜色空间来实现,本文介绍最简单的基于RGB颜色空间的彩色保留算法。
原文: Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法



[函数名称]

  部分彩色保留函数       WriteableBitmap PartialcolorProcess(WriteableBitmap src,int rValue,int gValue,int bValue)

[算法说明]

  这个算法有多种,可以基于RGBHSV等多种颜色空间来实现,本文介绍最简单的基于RGB颜色空间的彩色保留算法。

  对于我们需要保留的像素P(x,y),它的RGB值分别为R(x,y),G(x,y),B(x,y),各个分量之间的关系有如下几种:

  1--R>G>B;2R>B>G;3B>R>G;4B>G>R;5G>R>B;6G>B>R;

  对于当前像素f(x,y)

  如果该像素的RGB分量关系情况与P(x,y)像素的分量关系情况相同,则该像素颜色保留,否则,将该像素做灰度化处理。

  这样,就可以保留我们需要的颜色像素了。

 [函数代码]

        /// <summary>
        /// Partial color process.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <param name="rValue">R channel of pixel.</param>
        /// <param name="gValue">G channel of pixel.</param>
         /// <param name="bValue">B channel of pixel.</param>
        /// <returns></returns>
         public static WriteableBitmap PartialcolorProcess(WriteableBitmap src,int rValue,int gValue,int bValue)////部分彩色
         {
             if (src != null)
             {
                 int w = src.PixelWidth;
                 int h = src.PixelHeight;
                 WriteableBitmap srcImage = new WriteableBitmap(w, h);
                 byte[] temp = src.PixelBuffer.ToArray();
                 byte[] tempMask = (byte[])temp.Clone();
                 int r = 0, g = 0, b = 0;
                 int grayValue=0;
                 for (int j = 0; j < h; j++)
                 {
                     for (int i = 0; i < w; i++)
                     {
                         b = tempMask[i * 4 + j * w * 4];
                         g = tempMask[i * 4 + 1 + j * w * 4];
                         r = tempMask[i * 4 + 2 + j * w * 4];
                         if (((r > b && b > g && rValue > gValue && gValue > bValue) || (r > g && g > b && rValue > gValue && gValue > bValue) || (g > r && r > b && gValue > rValue && rValue > bValue)
                             || (g > b && b > r && gValue > bValue && bValue > rValue) || (b > g && g > r && bValue > gValue && gValue > rValue) || (b > r && r > g && bValue > rValue && rValue > gValue)))
                         {
                         }
                         else
                         {
                             grayValue = (int)((tempMask[i * 4 + j * w * 4] + tempMask[i * 4 + 1 + j * w * 4] + tempMask[i * 4 + 2 + j * w * 4]) / 3);
                             temp[i * 4 + j * w * 4] = temp[i * 4 + 1 + j * w * 4] = temp[i * 4 + 2 + j * w * 4] = (byte)grayValue;
                         }
                     }
                 }
                 Stream sTemp = srcImage.PixelBuffer.AsStream();
                 sTemp.Seek(0, SeekOrigin.Begin);
                 sTemp.Write(temp, 0, w * 4 * h);
                 return srcImage;
             }
             else
             {
                 return null;
             }
         }

目录
相关文章
|
6月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
128 1
|
11天前
|
算法 C#
C#常见的四种经典查找算法
C#常见的四种经典查找算法
|
11天前
|
算法 C# 索引
C#线性查找算法
C#线性查找算法!
|
1月前
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
|
1月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
1月前
|
机器学习/深度学习 算法 数据挖掘
使用C# 实现期望最大化算法
使用C# 实现期望最大化算法
47 0
|
2月前
|
存储 算法 C#
C#二叉搜索树算法
C#二叉搜索树算法
|
5月前
|
C#
C# 版本的 计时器类 精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出
这篇2010年的文章是从别处搬运过来的,主要包含一个C#类`TimeCount`,该类有多个方法用于处理时间相关的计算。例如,`GetMaxYearCount`计算以毫秒为单位的最大年数,`GetCurrentTimeByMiliSec`将当前时间转换为毫秒,还有`SecondsToYYMMDDhhmmss`将秒数转换为年月日时分秒的字符串。此外,类中还包括一些辅助方法,如处理小数点后保留一位数字的`RemainOneFigureAfterDot`。
|
5月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
4月前
|
Dart 算法 JavaScript
C#数据结构与算法入门教程,值得收藏学习!
C#数据结构与算法入门教程,值得收藏学习!
下一篇
无影云桌面