Ios 为什么不是';我的文字在视网膜上画得不对吗
我试图画一些文本,在非视网膜显示器上可以,但在视网膜显示器上分辨率不高 以下是我的iPad Air的屏幕截图: 请参见下面的代码,该代码实际上将文本绘制为半透明,周围有一个几乎不透明的遮罩,因此您可以通过文本看到图像Ios 为什么不是';我的文字在视网膜上画得不对吗,ios,cocoa-touch,nsstring,uibezierpath,uigraphicscontext,Ios,Cocoa Touch,Nsstring,Uibezierpath,Uigraphicscontext,我试图画一些文本,在非视网膜显示器上可以,但在视网膜显示器上分辨率不高 以下是我的iPad Air的屏幕截图: 请参见下面的代码,该代码实际上将文本绘制为半透明,周围有一个几乎不透明的遮罩,因此您可以通过文本看到图像 -(void) maskImage:(UIImageView *)imageView withText:(NSString *)text font:(UIFont *)font attributes:(NSDictionary *)attributes yOffset:(CGFl
-(void) maskImage:(UIImageView *)imageView withText:(NSString *)text font:(UIFont *)font attributes:(NSDictionary *)attributes yOffset:(CGFloat)yOffset
{
NSStringDrawingContext *paraContext = [[NSStringDrawingContext alloc] init];
NSStringDrawingOptions stringDrawingOptions = NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine;
// find out how much space we need for the text
CGSize textSize = CGSizeIntegral([text boundingRectWithSize:CGSizeMake(kNowPlayingTrackDetailsMaxWidth, kNowPlayingTrackDetailsMaxHeight) options:stringDrawingOptions attributes:attributes context:paraContext].size);
// set up the frame for drawing the text, including some padding
CGSize drawingSize = {textSize.width + 80, textSize.height + 60};
CGRect drawingFrame = { 0, 0, drawingSize.width, drawingSize.height};
CGRect textFrame = { 40, 30, textSize.width, textSize.height };
UIGraphicsBeginImageContextWithOptions(drawingSize, YES, 0);
UIColor *bgColor = [UIColor colorWithWhite:1 alpha:.98];
[bgColor setFill];
[bgColor setStroke];
UIBezierPath *path = [UIBezierPath bezierPathWithRect:drawingFrame];
[path fill];
// draw the text
[text drawWithRect:textFrame options:stringDrawingOptions attributes:attributes context:paraContext];
UIImage *textImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// now create an image mask from the text image
CIImage *inputImage = [CIImage imageWithCGImage:textImage.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CIMaskToAlpha" keysAndValues:kCIInputImageKey, inputImage, nil];
CIImage *outputImage = [filter outputImage];
imageView.image = [UIImage imageWithCIImage:outputImage];
// final set the UIImageView size to match the drawing size
CGRect imageViewFrame = imageView.frame;
imageViewFrame.size = drawingSize;
imageView.frame = imageViewFrame;
}
奥利弗·琼斯帮我解决了这个问题。谢谢@orj 答案是使用创建UIImage
[UIImage imageWithCIImage:outputImage scale:textImage.scale orientation:UIImageOrientationUp];
而不是
imageView.image = [UIImage imageWithCIImage:outputImage];
这将正确设置输出图像的比例。遮罩的大小(以像素和点为单位)是多少?我的意思是,您是否放大了遮罩图像以获得视网膜分辨率?在开始图像上下文时是否尝试过缩放因子,如下所示:
UIGraphicsBeginImageContextWithOptions(drawingSize,YES,[[UIScreen mainScreen]scale])代码>@holex,我很确定我在任何地方都使用点,如我的代码所示。@AdilSoomro我已经试过了。将0传递给scale参数会告诉UIGraphics使用主屏幕的比例。输出图像的比例是多少?