手机
当前位置:查字典教程网 >编程开发 >C#教程 >判断图片-判断位图是否是黑白图片的方法
判断图片-判断位图是否是黑白图片的方法
摘要:图片象对:经过理处过的jpg格式的位图(头像照片)算法道理:通过个每像素点的RGB值来行进判断。我们道知,位图都是由像素点形成的,个每像素点...

图片象对:经过理处过的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绝对值的最大值。

}

【判断图片-判断位图是否是黑白图片的方法】相关文章:

C#中判断本地系统的网络连接状态的方法

C#保存图片到数据库并读取显示图片的方法

C# 判断字符串为空的几种办法

C#实现窗体淡入淡出效果的方法总结

C#操作config文件的具体方法

C# 将字节流转换为图片的实例方法

c# 获取数据库中所有表名称的方法

c#简单读取文本的实例方法

C# 判断字符串第一位是否为数字

C# 去除首尾字符或字符串的方法

精品推荐
分类导航