C# 忽略alpha分量比较颜色
我有一种情况,我想拿一个C# 忽略alpha分量比较颜色,c#,.net,C#,.net,我有一种情况,我想拿一个位图,用不同的颜色替换给定的颜色。我最初的计划是传入一个字典,然后循环检查所有像素,检查当前颜色是否在字典/地图中,然后根据需要进行替换 但是,如果原始图像有任何alpha,我希望保留该alpha。我一直在想,最好的办法是忽略alpha成分来检查字典中是否有颜色 到目前为止,我提出的方法只是创建一个新的RGBOnlyColor类或类似类,并使用它代替字典中的Color,并在查找之前将从GetPixel获得的颜色转换为该颜色。这似乎太过分了,所以我想知道是否有什么我错过了使
位图
,用不同的颜色替换给定的颜色。我最初的计划是传入一个字典
,然后循环检查所有像素,检查当前颜色是否在字典/地图中,然后根据需要进行替换
但是,如果原始图像有任何alpha,我希望保留该alpha。我一直在想,最好的办法是忽略alpha成分来检查字典中是否有颜色
到目前为止,我提出的方法只是创建一个新的RGBOnlyColor
类或类似类,并使用它代替字典中的Color
,并在查找之前将从GetPixel
获得的颜色转换为该颜色。这似乎太过分了,所以我想知道是否有什么我错过了使它更简单
另一个选项是创建一个ColorMap类,它是dictionary的一个简单扩展,在设置和检索时,它只会强制alpha为一个已知值,以确保它是无关的
有谁能帮我找到最好的方法吗?总之,我想在图像中交换颜色,使alpha部分保持不变,但这比看起来更难…:) 要比较颜色(不包括alpha比较),您只需要以下内容:
bool RGBequal(Color c1, Color c2)
{
return c1.R==c2.R && c1.G==c2.G && c1.B==c2.B;
}
要实现基于词典的方法,您可以使用Color.FromArgb(r,g,b)
使用alpha值为255的颜色填充词典。或许可以使用扩展方法:
Color Opaque(this Color color)
{
return Color.FromArgb(color.R, color.G, color.B);
}
创建将一种颜色的alpha通道与另一种颜色的RGB相结合的新颜色非常简单:
Color.FromArgb(color1.A, color2.R, color2.G, color2.B);
要比较颜色(不包括alpha比较),您只需要以下内容:
bool RGBequal(Color c1, Color c2)
{
return c1.R==c2.R && c1.G==c2.G && c1.B==c2.B;
}
要实现基于词典的方法,您可以使用Color.FromArgb(r,g,b)
使用alpha值为255的颜色填充词典。或许可以使用扩展方法:
Color Opaque(this Color color)
{
return Color.FromArgb(color.R, color.G, color.B);
}
创建将一种颜色的alpha通道与另一种颜色的RGB相结合的新颜色非常简单:
Color.FromArgb(color1.A, color2.R, color2.G, color2.B);
一种简单的方法是在字典中查找每种颜色之前将其alpha通道归零,然后在解析映射颜色后注入正确的alpha值 例如:
Color colorFromBitmap; // assume already have this
var colorToLookup = Color.FromArgb(0, colorFromBitmap);
var mappedColor = dictionary[colorToLookup];
var finalResult = Color.FromArgb(colorFromBitmap.A, mappedColor);
由于在字典中查找颜色之前,alpha设置为
0
,因此字典中的颜色也应具有0
alpha。一种简单的方法是在字典中查找之前,将每种颜色的alpha通道归零,然后在解析贴图颜色后注入正确的alpha值
例如:
Color colorFromBitmap; // assume already have this
var colorToLookup = Color.FromArgb(0, colorFromBitmap);
var mappedColor = dictionary[colorToLookup];
var finalResult = Color.FromArgb(colorFromBitmap.A, mappedColor);
因为在字典中查找颜色之前,alpha被设置为
0
,所以字典中的颜色也应该有0
alpha。D'oh!当然就这么简单。在对照字典进行测试之前,我甚至没有想到修改从图像中获得的颜色哦!当然就这么简单。在对照字典进行测试之前,我甚至没有想到修改从图像中获得的颜色