执行此操作的简单方法是将 T 恤图像渲染到 CGContext 中,然后遍历行和列并将显示“强”原色的像素更改为所需的色调。您将拍摄一个穿着鲜红色(或其他原色)T 恤的人的照片,然后在您的代码中仅更改红色具有高亮度和饱和度的像素(即“r”值超过某个阈值b 和 g 分量很低)。
修改后的图像看起来会有点平坦,因为当您将像素更改为一个值(新色调)时,亮度不会发生变化。为了使这更真实,您需要使每个像素具有与以前相同的亮度。您可以通过从 RGB 到 HCL 等颜色空间来回转换来做到这一点。Apple 有一个很棒的关于颜色的文档(在 Mac 部分),它解释了颜色空间(google 'site:developer.apple.com "Color Spaces"')
为了实现您的目标,您将不得不处理这些技术:
- 创建一个 CGContext 并使用 Quartz 将图像渲染到其中
- 弄清楚如何读取每个像素(像素可以有 alpha 和不同的排序)
- 找出识别正确像素的好方法(通过使这些像素变为黑色或白色来测试)
- 对于要更改的每个像素,将 RGB 转换为 HCL 以获取其亮度
- 用颜色和色调不同但亮度相同的像素替换像素
- 使用 CGContext 制作新图像
如果这一切看起来很困难,那么您必须为您想要的每种颜色提供不同的图像。