【发布时间】:2014-08-28 07:24:44
【问题描述】:
我正在尝试通过文本使背景可见。这是一个例子。
我使用以下代码使其工作。
- (UIImage *)maskImage:(UIImage *)image withMask:(CGImageRef)maskRef {
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
// returns new image with mask applied
return maskedImage;
}
- (void)setImageForView:(UIImageView *)imageView withText:(NSString *)text {
NSDictionary *attributes = @{ NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Neue" size:45], NSForegroundColorAttributeName: [UIColor whiteColor], NSBackgroundColorAttributeName: [UIColor blackColor] };
CGSize size = [text sizeWithAttributes:attributes];
CGPoint center = imageView.center;
imageView.frame = CGRectMake(0, 0, size.width + 10, 41);
imageView.center = center;
UIGraphicsBeginImageContext(imageView.bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
// Draw a dark gray background
CGRect rect = imageView.bounds;
CGContextFillRect(context, rect);
// Draw the text upside-down
CGContextSaveGState(context);
CGContextSetInterpolationQuality( context , kCGInterpolationHigh );
[text drawInRect:CGRectMake((rect.size.width - size.width) / 2, (rect.size.height - size.height) / 2, size.width, size.height) withAttributes:attributes];
CGContextRestoreGState(context);
// Create an image mask from what we've drawn so far
CGImageRef alphaMask = CGBitmapContextCreateImage(context);
UIGraphicsEndImageContext();
imageView.image = [self maskImage:[UIImage imageNamed:@"white"] withMask:alphaMask];
}
它几乎可以工作,但是因为它使用渲染的文本作为蒙版,所以它似乎失去了如本例所示的抗锯齿效果。
我想知道是否有办法获得像第一张图片一样的结果。任何帮助将不胜感激。
【问题讨论】:
标签: ios text transparent