我有一个定制衣服的项目,比如说一件T恤,具有以下特点:
- 更改颜色。
- 添加几行文本 ( <= 4) 并从列表中更改字体。
- 将图片或照片添加到 T 恤上。
- 将 T 恤旋转到自定义背面。
- 旋转图像并放大/缩小。
- 在本地将结果保存为项目并将其发送到网络服务(我认为使用 NSDictionary/json)。
- 另存为图像。
所以我的问题是:
我应该使用多个图像来模拟颜色变化吗?或者我应该使用QuartzCore(我不是QuartzCore的专家,但如果我必须使用它,我会学习)。或者有更好的方法吗?
谢谢。
最简单的方法是将 T 恤图像渲染为 CGContext,然后遍历行和列,并将显示"强"原色的像素更改为所需的色调。你会拍一张穿着鲜红色(或其他原色)T恤的人的照片,然后在你的代码中只改变红色具有高亮度和饱和度的像素(即"r"值超过某个阈值,b和g分量低)。
然后,修改后的图像看起来会有点平坦,因为当您将像素更改为一个值(新色调)时,亮度不会发生变化。为了使它更逼真,您需要使每个像素具有与以前相同的亮度。您可以通过从 RGB 来回转换到 HCL 等颜色空间来做到这一点。苹果有一个很棒的颜色文档(在Mac部分)解释了颜色空间(谷歌'site:developer.apple.com"Color Spaces"')
为了实现您的目标,您必须处理以下技术:
- 创建CGContext并使用Quartz将图像渲染到其中
- 弄清楚如何读取每个像素(像素可以有 alpha 和不同的顺序)
- 找出识别正确像素的好方法(通过使这些像素变黑或变白来进行测试)
- 对于要更改的每个像素,将 RGB 转换为 HCL 以获得其亮度
- 将像素替换为颜色和色调不同但亮度相同的像素
- 使用CGContext制作新图像
如果这一切看起来很困难,那么您必须为您想要的每种颜色提供不同的图像。