我有CGImageRef
张图片。它实际上是一个将用作蒙版的图像。所以," alpha层"这是我真正关心的。我想"加厚"图像的不透明部分,好像我会在不透明部分周围添加笔划。怎么做?
我有一张图像(CGImageRef
):
它是由
创建的 mask = CGBitmapContextCreateImage(context);
我用它作为面具。掩码下的UIView
是相同的文本。问题是掩码覆盖了下面的文字。参见:
此代码位于UILabel
子类中。
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
// Draw text normally
[super drawTextInRect:rect];
if (self.alternativeTextColor) {
CGImageRef mask = NULL;
// Create a mask from the text
mask = CGBitmapContextCreateImage(context);
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, self.frame.size.height);
CGContextScaleCTM(context, 1.0, (CGFloat) -1.0);
// Clip the current context to our mask
CGContextClipToMask(context, rect, mask);
// Set fill color
CGContextSetFillColorWithColor(context, [self.alternativeTextColor CGColor]);
// Path from mask
CGPathRef path;
if (CGRectIsEmpty(self.maskFrame)) {
path = CGPathCreateMutable();
} else {
UIBezierPath *roundRectBezierPath = [UIBezierPath bezierPathWithRoundedRect:self.maskFrame
cornerRadius:self.maskCornerRadius];
path = CGPathCreateCopy([roundRectBezierPath CGPath]);
}
CGContextAddPath(context, path);
// Fill the path
CGContextFillPath(context);
CFRelease(path);
// Clean up
CGContextRestoreGState(context);
CGImageRelease(mask);
}
}
答案 0 :(得分:1)
如果你试图剪辑到文本,我建议不要通过中间位图来做,而是剪切到实际文本的路径,如下面SVGgh的GHText类的片段:
CGContextSaveGState(quartzContext);
CGContextSetTextDrawingMode(quartzContext, kCGTextStrokeClip);
CGContextSetLineWidth(quartzContext, strokeWidthToUse);
... Draw Text here ....
CGContextReplacePathWithStrokedPath(quartzContext);
CGContextClip(quartzContext);
... Do clipped drawing here ...
CGContextSetTextDrawingMode(quartzContext, kCGTextFill);
CGContextRestoreGState(quartzContext);
这不是回答你的问题,但它可能是你应该做的事情。使用CGContextSetTextDrawingMode来获得你想要的效果。