2013-01-18 161 views
2

我想提請在代表手錶的數字圓圈12張圖像,我已經閱讀計算器關於與透明邊框圖像的所有議題,但它不是我的情況下工作抗鋸齒的UIImage看起來模糊或鋸齒狀

-(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有透明邊界

enter image description here

號的牛逼12'o時鐘和6'o時鐘看起來不錯,因爲他們不旋轉,其餘都是鋸齒

draw with text

+0

抗鋸齒不應與UIImageViews的一個問題。我認爲這可能是另一個問題。你是否急劇縮小了你使用的圖像? –

+0

沒有圖像被縮小,它們都具有原始尺寸 –

+0

您獲得的質量是技術上可行的。當您創建原始圖像時,會使用最佳的抗鋸齒功能。當你旋轉它時,它不再是最佳的。每次轉換隻會導致質量下降。最好使用文本繪圖功能來創建時鐘。 – Codo

回答

0

嘗試

CGContextSetInterpolationQuality(context, kCGInterpolationHigh); 
+0

試過,但沒有解決問題 –

6

不要說UIGraphicsBeginImageContext(imageRect.size)。說UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, 0)。這樣,在雙分辨率屏幕上,您將獲得雙分辨率圖形上下文。

甚至可以嘗試4的分辨率值來進一步提高分辨率。

當然,事實上,您從預繪製的「2」圖像開始可能會限制您的分辨率;你不能在母豬的耳朵上製作一個絲質的錢包。作爲一個字符串從頭開始繪製「2」可能會更好。

+0

我附上了一個帶有字符串而不是圖像的圖像,但我仍然有抗鋸齒功能不能正常工作 –

+0

但是您沒有按照更高分辨率繪製圖片,是嗎? – matt

+0

不,我沒有那樣做 –

0

斯威夫特3:因爲他們是默認抗鋸齒,而不是UIView的的這往往顯示爲鋸齒狀

context!.interpolationQuality = .high