Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 忽略alpha分量比较颜色_C#_.net - Fatal编程技术网

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!当然就这么简单。在对照字典进行测试之前,我甚至没有想到修改从图像中获得的颜色哦!当然就这么简单。在对照字典进行测试之前,我甚至没有想到修改从图像中获得的颜色