判断图片-判断位图是否是黑白图片的方法

所属分类: 软件编程 / C#教程 阅读数: 60
收藏 0 赞 0 分享

     图片象对:经过理处过的jpg格式的位图(头像照片)

    算法道理:

    通过个每像素点的RGB值来行进判断。我们道知,位图都是由像素点形成的,个每像素点都有一个 RBG值,所以可以通过RGB值来判断图片否是是彩色的。

    【RGB】:R代表红,G代表绿,B代表蓝,通过三原色道理来形成丰富多彩的色颜。

     开端思绪:

    1、纯彩色图片,只有判断像素点的色颜是黑还是白就能够了,一旦碰到非彩色色颜,就能够以为长短彩色图片。

    2、灰阶彩色图片,由于有灰阶,所以不是能通过像素点否是是彩色来判断,但是灰阶像素点的RGB有个特色:【R=G=B】

     算法优化:

    1、纯彩色,只有白黑二色,白色RGB【R=G=B=255】,色黑【R=G=B=0】;

    2、灰阶,RGB【R=G=B】;

    可以看出无论是彩色还是灰阶都是RGB中【R=G=B】

    碰到问题:

    有些可以以为是彩色图片,存在偏绿或者偏红的况情,用【R=G=B】法无判断出来。

    理处思绪:

    虽然这些图片【R<>B<>G】但是色颜大体一致都是近靠灰阶色颜,所以R,G,B的差值该应不是很大,经过我自己测试,发明种这【有偏色的彩色照片】图片中的有所像素点的R,G,B差值绝对最大值不超越50(R-G,R-B,G-B),而彩色图片中的R,B,G差值存在绝对值最大值存在超越 50的像素点。

    单简说来就是:

    1、【自定义】色偏值 Diff = Max(|R-G|,|R-B|,|G-B|);

    2、彩色图片有所图片中最大的 Diff < 50;

 【P.S:这个算法可能存在误差,格严意义上说来R=G=B,Diff=0才对。】

     详细现实:

复制代码 代码如下:

/// <summary>
/// 判断图片否是是彩色
/// </summary>
/// <param name="filename">图片文件路径</param>
/// <returns></returns>
public bool isBlackWhite(string filename)
{
   Color c = new Color();

   using (Bitmap bmp = new Bitmap(filename))
   {
      //历遍图片的像素点
      for (int y = 0; y < bmp.Height; y++)
      {
         for (int x = 0; x < bmp.Width; x++)
         {
            c = bmp.GetPixel(x, y);

     //判断像素点的色偏差值Diff
            if (GetRGBDiff(c.R, c.G, c.B) > 50)
            {
               return false;
             }
          }
       }

       return true;
    }
}


复制代码 代码如下:

public int GetRGBDiff(int r,int g,int b)
{
   //略,很单简的,就是取r-g,r-b,g-b绝对值的最大值。
}

更多精彩内容其他人还在看

WPF仿三星手机充电界面实现代码

这篇文章主要为大家详细介绍了WPF仿三星手机充电界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

浅谈C#各种数组直接的数据复制/转换

下面小编就为大家带来一篇浅谈C#各种数组直接的数据复制/转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

C#访问SQLServer增删改查代码实例

这篇文章主要为大家详细介绍了C#访问SQLServer增删改查代码实例,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#根据身份证号码判断出生日期和性别

这篇文章主要为大家详细介绍了C#根据身份证号码判断出生日期和性别的方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C# 向Word中设置/更改文本方向的方法(两种)

在一般情况下word中输入的文字都是横向的,今天小编给大家带来两种方法来设置更改文本方向的方法,非常不错,对c# word 更改文本方向的知识感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

让C# Excel导入导出 支持不同版本Office

让C# Excel导入导出,支持不同版本的Office,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#设置自定义文件图标实现双击启动(修改注册表)

这篇文章介绍的是利用C#设置自定义文件图标,然后实现双击启动的功能,文章给出了示例代码,介绍的很详细,有需要的可以参考借鉴。
收藏 0 赞 0 分享

C#两个相同属性的类赋值方法

这篇文章主要介绍了C#两个相同属性的类赋值方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

C#中ListView控件实现窗体代码

这篇文章主要介绍了C#中ListView控件实现窗体的核心代码,非常不错,具有参考借鉴价值,对c#listview相关知识感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

浅谈C# 序列化与反序列化几种格式的转换

下面小编就为大家带来一篇浅谈C# 序列化与反序列化几种格式的转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多