Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 将CGContextRef着色,但保留Alpha_Iphone_Objective C_Alpha_Cgcontext_Colorize - Fatal编程技术网

Iphone 将CGContextRef着色,但保留Alpha

Iphone 将CGContextRef着色,但保留Alpha,iphone,objective-c,alpha,cgcontext,colorize,Iphone,Objective C,Alpha,Cgcontext,Colorize,我有一个CGContextRef,可以在上面绘制并指定alpha,如果我尝试使用它,它会工作得很好。但是,我正在尝试将其着色(当前为红色或绿色),但无论我选择何种混合模式,alpha都设置为1(因为我使用alpha绘制1)。绘制正确的颜色并不是一个切实可行的选择,因为我希望能够对从文件系统加载的UIImages进行着色,那么我应该如何实现这一点呢 编辑:示例代码(宽度和高度是预定义的浮动,点是CGPoints的数组,所有这些点都位于上下文中,颜色是UIColor,不透明度为100%)- UIGr

我有一个
CGContextRef
,可以在上面绘制并指定alpha,如果我尝试使用它,它会工作得很好。但是,我正在尝试将其着色(当前为红色或绿色),但无论我选择何种混合模式,alpha都设置为
1
(因为我使用alpha绘制
1
)。绘制正确的颜色并不是一个切实可行的选择,因为我希望能够对从文件系统加载的
UIImage
s进行着色,那么我应该如何实现这一点呢

编辑:示例代码(宽度和高度是预定义的浮动,点是CGPoints的数组,所有这些点都位于上下文中,颜色是UIColor,不透明度为100%)-

UIGraphicsBeginImageContext(CGSizeMake(宽度、高度));
CGContextRef contextRef=UIGraphicsGetCurrentContext();
CGContextClearRect(contextRef,CGRectMake(0.0f,0.0f,宽度,高度));
CGContextSetRGBStrokeColor(contextRef,0.0f,0.0f,0.0f,1.0f);
CGContextSetRGBFillColor(contextRef,1.0f,1.0f,1.0f,1.0f);
CGContextSetLineWidth(contextRef,线宽);
CGContextBeginPath(contextRef);
CGContextMoveToPoint(contextRef,点[0].x,点[0].y);
对于(int i=1;i<4;i++){
CGContextAddLineToPoint(contextRef,点[i].x,点[i].y);
}
CGContextAddLineToPoint(contextRef,点[0].x,点[0].y);//封闭形状
CGContextDrawPath(contextRef,kCGPathFillStroke);
[颜色设置填充];
CGContextBeginPath(contextRef);
CGContextSetBlendMode(contextRef、kCGBlendModeMultiply);
CGContextAddRect(contextRef,CGRectMake(0.0f,0.0f,宽度,高度));
CGContextDrawPath(contextRef、kCGPathFill);
UIImage*image=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsSendImageContext();
提前感谢您的帮助,

jrtc27

问题是我需要一个
CGContextClipToMask
。这意味着我的代码需要以下内容:

CGContextTranslateCTM(contextRef, 0, height);
CGContextScaleCTM(contextRef, 1.0, -1.0);
转换坐标,然后

CGRect rect = CGRectMake(0.0f, 0.0f, width, height);
CGContextClipToMask(contextRef, rect, UIGraphicsGetImageFromCurrentImageContext().CGImage);

来解决问题。

您能给我们一些示例代码,让我们更好地了解您的问题吗?好的,这很有帮助。我试图理解你们的想法,所以请告诉我我是否正确。从这里我看到的是,你试图画一个白色的矩形,黑色的边框,没有透明度。然后执行未知函数[颜色设置填充];我不知道它是做什么的(即使名字本身就说明了问题,你也可能想给我们一些信息)。然后,您正在前一个矩形的顶部绘制另一条具有相同尺寸的路径。然后,您需要获取图形并将其存储在该图像变量中。现在进行一些澄清:kCGBlendModeMultiply将源图像样本与背景图像样本相乘。这将导致颜色至少与两种样本颜色中的任何一种颜色一样暗。所以你可能想用另一个。尝试将其设置为正常并发布结果。另外:如果alpha有问题,请尝试使用以下函数手动将其设置为上下文:CGContextSetAlpha(CGContextRef c,CGFloat alpha);试试看,把结果贴在这里。我希望白色四边形和黑色边框有alpha 1,背景有alpha 0-我做到了。然而,我正在尝试拍摄这张图片并应用颜色,同时不改变背景的alpha。我还应该试试你的建议吗?顺便说一句,[color setFill]使UIColor成为当前上下文的填充颜色。我不是很了解您,但它可能有助于CGContextStrokePath(上下文);CGContextFillPath(上下文);还有一个例子,从图像中获取颜色
CGRect rect = CGRectMake(0.0f, 0.0f, width, height);
CGContextClipToMask(contextRef, rect, UIGraphicsGetImageFromCurrentImageContext().CGImage);