C# 如何发现图像中的所有像素都是灰度级的,或者每个像素的R、G、B值相等
请不要引用这个或 因为即使所有唯一颜色为灰度或小于256,图像也可以是每像素24/32位,并且每个像素可以是24或32位 如何找到图像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的图像中的独特颜色 如果图
位图中的像素。GetPixel(x,y)
具有相等的R,G,B值,以便我可以确定图像中的所有像素是否都位于灰度范围内。因为灰度像素的R、G、B值是相同的。或者有没有更好的方法来确定图像是否为灰度级
我正在编写一个代码来压缩16/24/32位图像的大小,这样,如果图像有256种唯一的颜色,那么将其更改为8位图像并保存
首先,我计算每像素超过8的图像中的独特颜色
如果图像中的唯一颜色小于或等于256,则
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速度慢。因此,在你的内部循环中重复两次并不是一个好主意。要获得真正的速度,请查看锁定位。第二:检查aColor 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