我想画一个圆圈代表手表编号的12个图像,我已经阅读了关于stackoverflow的所有与透明边框图像有关的主题,但在我的情况下不起作用
-(UIImage *)addImageNumber_:(UIImage *)img {
int w = img.size.width;
int h = img.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);
CGContextSetShouldAntialias(context,YES);
CGContextSetAllowsAntialiasing( context ,YES );
CGAffineTransform transform;
for (int x=0; x<=11; x++) {
UIImage *timg1 = [UIImage imageNamed:@"2.png"];
CGRect imageRect = CGRectMake(0, 0, timg1.size.width+2, timg1.size.height+2);
UIGraphicsBeginImageContext(imageRect.size);
[timg1 drawInRect:CGRectMake(1,1,timg1.size.width,timg1.size.height)];
timg1 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
transform = CGAffineTransformIdentity;
CGContextDrawImage(context, CGRectMake((w-26)/2, 0, 26, 30), timg1.CGImage);
transform = CGAffineTransformConcat(transform, CGAffineTransformMakeTranslation(-w/2, -w/2));
transform = CGAffineTransformConcat(transform, CGAffineTransformMakeRotation(radians(30)));
transform = CGAffineTransformConcat(transform, CGAffineTransformMakeTranslation(w/2, w/2));
CGContextConcatCTM(context, transform);
}
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return [UIImage imageWithCGImage:imageMasked];
}
UIViewEdgeAntialiasing = YES;
UIImage *img = [UIImage imageNamed:@"test.png"];
UIImage *img2 = [self addImageNumber_:img ];
R1.image = img2;
[self.view addSubview:R1];
测试img是手表的背景,2.png是带有透明边框的透明png
12点钟和6点钟的数字看起来还不错,因为它们没有旋转,其余的都比较锯齿
最佳答案
永远不要说UIGraphicsBeginImageContext(imageRect.size)
。说UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, 0)
。这样,在双分辨率屏幕上,您将获得双分辨率图形上下文。
您甚至可以尝试将分辨率值设置为4,以进一步提高分辨率。
当然,从“2”的预先绘制图像开始这一事实可能会限制您的分辨率。你不能用母猪的耳朵制成丝绸钱包。从头开始以字符串形式绘制“2”可能会更好。
关于iphone - 抗锯齿UIimage看起来模糊或参差不齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14404877/