我正在使用 WPF C# 开发一个应用程序,其中我有一个图像,我想检测图像的不同图层,以便我可以通过从颜色托盘中选择任何颜色来更改图层的颜色(可以是普通颜色或渐变色)。
假设我有上面的 Image ,在 Image 中有不同的层,比如(墙、沙发、瓷砖、窗户、枕头等)。现在我的问题是如何检测图像的墙层并将其颜色从黄色渐变更改为正常颜色或渐变颜色的其他颜色,对于沙发等其他图像层相同,检测沙发并将其颜色从白色更改为窗户,地板,枕头层的其他东西和图像相同。
我正在使用 WPF C# 开发一个应用程序,其中我有一个图像,我想检测图像的不同图层,以便我可以通过从颜色托盘中选择任何颜色来更改图层的颜色(可以是普通颜色或渐变色)。
假设我有上面的 Image ,在 Image 中有不同的层,比如(墙、沙发、瓷砖、窗户、枕头等)。现在我的问题是如何检测图像的墙层并将其颜色从黄色渐变更改为正常颜色或渐变颜色的其他颜色,对于沙发等其他图像层相同,检测沙发并将其颜色从白色更改为窗户,地板,枕头层的其他东西和图像相同。
我认为您误解了图像中存储的内容。您会注意到,您可能在像 PhotoShop 这样的程序中创建的图层只能以 PhotoShop 自己的格式保存,而不能以 .Net 支持的更常见的图像格式(png、bmp、gif、jpg)保存。一旦您以其中一种格式加载了图像,您就会发现基本上只有一个二维颜色数组。没有任何东西可以将一个像素与其邻居或任何其他像素分开或链接。所以绝对没有层的概念。
您可以提供某种算法来遍历您的图像以寻找在容差范围内的像素,并以这种方式定义它们的集合,但这会产生非常糟糕的结果。如果您不确定我的意思,请尝试在您最喜欢的图像编辑器中对图像执行泛光填充。
为了获得更好的结果,不要在应用程序中使用单个图像,而是使用一组图像,每个图层一个,这样您就可以在显示合成图像时将它们重新组合在一起之前重新着色所需的图层。
<Grid>
<Image Source="Background"/>
<Image Source="RecolouredImage"/>
<Image Source="Foreground"/>
</Grid
当然,这仅适用于您在开发时控制图像的情况,而不是用户在运行时加载的图像。