Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我想用石英制作不同颜色的单色图像_Iphone_Ios_Objective C_Quartz Graphics - Fatal编程技术网

Iphone 我想用石英制作不同颜色的单色图像

Iphone 我想用石英制作不同颜色的单色图像,iphone,ios,objective-c,quartz-graphics,Iphone,Ios,Objective C,Quartz Graphics,我确信这个问题的答案在stackoverflow上存在,但我一直在寻找,还没有找到它。基本上,我有几个透明背景的图像和一些黑色图像,我希望能够将黑色部分的颜色更改为其他任意颜色 我相对确信这是可以实现的,但我还没有找到任何好的例子,所以这就是我要寻找的。也欢迎其他解决办法 谢谢 更新:我想我对这段代码已经非常熟悉了。。。但是我的面具坏了。虽然我的UIView确实用填充颜色填充,但它只是一个巨大的矩形,没有任何剪裁 更新#2:我现在(我想)更接近以下代码。问题是我的背景现在是黑色的,而不是透明的

我确信这个问题的答案在stackoverflow上存在,但我一直在寻找,还没有找到它。基本上,我有几个透明背景的图像和一些黑色图像,我希望能够将黑色部分的颜色更改为其他任意颜色

我相对确信这是可以实现的,但我还没有找到任何好的例子,所以这就是我要寻找的。也欢迎其他解决办法

谢谢

更新:我想我对这段代码已经非常熟悉了。。。但是我的面具坏了。虽然我的
UIView
确实用填充颜色填充,但它只是一个巨大的矩形,没有任何剪裁

更新#2:我现在(我想)更接近以下代码。问题是我的背景现在是黑色的,而不是透明的

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -rect.size.height);

CGImageRef maskImage = [self.image CGImage];
CGContextClipToMask(context, rect, maskImage);

[_colorToChangeInto setFill];
CGContextFillRect(context, rect);

答案已经在上面的问题中了。这不是很有效,因为我在IB中创建图像(在故事板中),并且没有设置背景色。不知怎的,它默认为黑色。太令人沮丧了

无论如何,在我将背景色更改为透明后,下面的代码就像一个符咒

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -rect.size.height);

CGImageRef maskImage = [self.image CGImage];
CGContextClipToMask(context, rect, maskImage);

[_colorToChangeInto setFill];
CGContextFillRect(context, rect);

如果在填充之前进行剪辑,会发生什么情况?剪辑只影响您以后所做的绘图。效果相同。只是一个大盒子的填充颜色。如果我去掉颜色空间B,直接使用图像作为遮罩,我会得到一个接近我想要的图像,但是背景是黑色的,而不是透明的。(我需要翻转坐标,我可以通过
CGContextScaleCTM(mainViewContentContext,1,-1);CGContextTranslateCTM(mainViewContentContext,0,-rect.size.height);
)翻转坐标。这个解决方案提供了另一个答案: