Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何发现图像中的所有像素都是灰度级的,或者每个像素的R、G、B值相等_C#_Image Processing - Fatal编程技术网

C# 如何发现图像中的所有像素都是灰度级的,或者每个像素的R、G、B值相等

C# 如何发现图像中的所有像素都是灰度级的,或者每个像素的R、G、B值相等,c#,image-processing,C#,Image Processing,请不要引用这个或 因为即使所有唯一颜色为灰度或小于256,图像也可以是每像素24/32位,并且每个像素可以是24或32位 如何找到图像位图中的像素。GetPixel(x,y)具有相等的R,G,B值,以便我可以确定图像中的所有像素是否都位于灰度范围内。因为灰度像素的R、G、B值是相同的。或者有没有更好的方法来确定图像是否为灰度级 我正在编写一个代码来压缩16/24/32位图像的大小,这样,如果图像有256种唯一的颜色,那么将其更改为8位图像并保存 首先,我计算每像素超过8的图像中的独特颜色 如果图

请不要引用这个或

因为即使所有唯一颜色为灰度或小于256,图像也可以是每像素24/32位,并且每个像素可以是24或32位

如何找到图像
位图中的像素。GetPixel(x,y)
具有相等的R,G,B值,以便我可以确定图像中的所有像素是否都位于灰度范围内。因为灰度像素的R、G、B值是相同的。或者有没有更好的方法来确定图像是否为灰度级

我正在编写一个代码来压缩16/24/32位图像的大小,这样,如果图像有256种唯一的颜色,那么将其更改为8位图像并保存

首先,我计算每像素超过8的图像中的独特颜色

如果图像中的唯一颜色小于或等于256,则

  • 如果所有唯一的颜色都在灰度范围内,则将其转换为灰度
  • 否则,如果任何颜色不是灰度,则将图像转换为8 BPP
  • 现在,我被困在如何发现图像中的每一种独特的颜色是否都存在于灰色中。我的意思是每种颜色都有相等的(R,G,B)值。比如R=G=B。我如何在代码行中找到它

    Bitmap.GetPixel(iCounter, iCount).ToArgb()
    
    Bitmap.GetPixel()
    返回一个结构,该结构包含
    R
    G
    B
    字段,因此您可以随意比较它们


    请注意,使用
    GetPixel()
    非常慢,但如果不需要速度,就可以了。

    好,您需要获取位序列的RGB分量。假设序列为24位,那么您有以下位序列:

    RRRRRRRRGGGGGGGGBBBBBBBB
    
    其中,
    R
    是红色的一位,
    G
    是绿色的一位,
    B
    是蓝色的一位。要将其分开,可以使用位运算符

    color=Bitmap.GetPixel(iCounter,iCount.ToArgb();
    蓝色=颜色&0xFF;//获取前8位
    绿色=(颜色>>8)&0xFF;//去掉前8位,取下第2个8位
    红色=(颜色>>16)&0xFF;//去掉前16位,取第3个8位
    
    First:GetPixel速度慢。因此,在你的内部循环中重复两次并不是一个好主意。要获得真正的速度,请查看锁定位。第二:检查a
    Color c=bmp.GetPixel(x,y)简单地做
    boolisgrey=(c.R==c.G)和&(c.G==c.B)谢谢,我很沮丧,互联网上到处都有人在建议Image.pixel格式,这会给出错误的结果。因为一个图像可以有256种唯一的颜色,但每种颜色可以是24位。所以,图像可以减少到每像素8位。谢谢,我很沮丧,在互联网上到处都有人建议image.pixel格式,这会给出错误的结果。因为一个图像可以有256种唯一的颜色,但每种颜色可以是24位。所以,图像可以减少到每像素8位。这几乎毫无意义。1:颜色结构及其通道已经存在,因此任何位移位都是完全浪费的…2)通道布局不是格式名称所暗示的rgb,而是bgr或bgra。
    
    Bitmap.GetPixel(iCounter, iCount).ToArgb()
    
    RRRRRRRRGGGGGGGGBBBBBBBB