c# - 更改图像部分的颜色

标签 c# colors gdi+

我正在尝试找到一个允许我更改图像部分颜色的解决方案。

例如,一张椅子的图片。 椅子可以有不同的框架或垫子颜色。 我打算让用户选择一个框架或垫子并更新图像。 我们只能上传一张椅子图片。

非常感谢任何想法!

最佳答案

检测要修改的图像部分

以编程方式检测图像上的对象可能不是一件简单的事情;)。我想 Collin O'Dell 在他对该问题的评论中提出了解决此问题的好方法之一。他建议使用少量图像,并手动分离要重新着色的图像部分。然后,您可以从几个不同的层合成最终图像。

但是,您也可以保留包含所有对象的主图像并手动制作一些附加图像,但仅保留对象的 mask (即白色像素物体所在的地方)。然后您可以轻松检查哪些像素应该重新着色。这将允许您直接在一张图像上绘画并避免合成。

计算颜色

当您想要为照片重新着色时,您可能希望能够保留阴影效果等,而不是用相同的纯色覆盖所有部分。 为了实现这一点,您可以使用 HSV 颜色空间而不是 RGB。要使用此方法,您应该:

  • 读取像素的颜色(RGB)
  • 将其重新计算为HSV
  • 更改颜色的Hue值以获得所需的色度
  • 将修改后的颜色重新计算回 RGB
  • 设置像素的新颜色

有关HSV 颜色空间的更多信息,您可以在此处查看:http://en.wikipedia.org/wiki/HSL_and_HSV .

关于c# - 更改图像部分的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9606936/

相关文章:

c# - 如何将 excel 文件转换为 .csv 文件?

java - 颜色java类

c# - Winforms:SuspendLayout/ResumeLayout 还不够吗?

c# - 位图类不处理流?

c# - 使用 C# 在设备之间传递确认码

c# - 在堆栈跟踪中打印参数值

excel - 我如何在vba中正确格式化它

c++ - 使用DrawEllipse(GDI+)绘制手写笔画点

c# - 防止在松散耦合系统中多次执行操作的策略(使用 Azure 服务总线和云工作人员)

qt - 在考虑样式表属性的情况下在paintEvent 中绘制Qt 控件