简单的我有两个人的UIImageView图标,它看起来像这样:如何仅为UIImage的非白色部分设置色调颜色?
,但是当我设置tintColor
为红色,它看起来是这样的:
有什么办法避免覆盖每个非零元素像素?我需要在那里显示领带。有一次我需要红色的人,其他时间是绿色的。
该图标是简单的PNG文件。圆圈是UIImageView的简单背景色。因此,和的图像部分不能为zero-alpha。
有没有办法达到这样的效果没有创建每种颜色的图像?
简单的我有两个人的UIImageView图标,它看起来像这样:如何仅为UIImage的非白色部分设置色调颜色?
,但是当我设置tintColor
为红色,它看起来是这样的:
有什么办法避免覆盖每个非零元素像素?我需要在那里显示领带。有一次我需要红色的人,其他时间是绿色的。
该图标是简单的PNG文件。圆圈是UIImageView的简单背景色。因此,和的图像部分不能为zero-alpha。
有没有办法达到这样的效果没有创建每种颜色的图像?
这是相似的另一个想法我一直在与玩弄,所以我也多了几分小提琴演奏......
这些3张开始:
,然后使用他们作为.withRenderingMode(.alwaysTemplate)
给予所需的颜色...然后通过CALayer
将它们分层得到:
和“爆炸”的清晰视图...
创建一个像这里的“人”是100%透明 - 有效图像中的“漏洞”。
将UIImageView的背景颜色设置为“填充”颜色。
如果您不想将白色边界框作为图像的一部分,您仍然可以使用圆形(例如CAShapeLayer)对其进行遮罩。
原始图片: https://i.stack.imgur.com/eFrmB.png https://i.stack.imgur.com/2GNDX.png
它看起来相当不错;)但是......如果我需要改变圈子的背景怎么办?我究竟做了什么?原因?需要显示它被选中或没有...没有其他方式来做到这一点?目前+1 –
您可以通过多层图像和蒙版组合获得“花哨”......会稍微玩一下,但不是没有问题。另一种选择是...因为你的图像非常简单,从PNG切换到一对贝塞尔路径+填充操作并不需要太多。也会很好地扩展。 – DonMag
不... bezier路径是错误的方式...它不仅是关于那个图标... –
使用CISpotColor过滤器:
这允许您指定图像的颜色被改变成另一种颜色。因此,由于您知道领带和背景的原始颜色,因此您可以通过一次移动就可以更改其中一个或两个。
为什么你不使用两个图像? –
因为我需要动态改变颜色。有一次它可能是绿色的,其他时间是红色或黑色的... –
核心图像。具体来说,使用GLSL编写你自己的CIKernel。这其实很简单。 – dfd