2013-01-02 10 views
5

Nach dem Versuch, die Antwort gepostet here das Bild, das zurückgegeben wird, ist von einer sehr schlechten Qualität auf dem Retina-Display. Mein Maskenbild hat einen weißen Hintergrund und einen schwarzen Inhalt. Jede Hilfe wird geschätzt.Masking von 2 UIImages in Retina-Qualität

Ausgang: http://cl.ly/image/2A433N3t1h33 Code:

CGRect rect = CGRectMake(0.0f, 0.0f, 61.0f, 53.0f); 
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 2); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); 
CGContextFillRect(context, rect); 

UIImage *imageGradient = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle.png"]; 
UIImage *inputImage = imageGradient; 
CGImageRef maskRef = toggleImage.CGImage; 

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
            CGImageGetHeight(maskRef), 
            CGImageGetBitsPerComponent(maskRef), 
            CGImageGetBitsPerPixel(maskRef), 
            CGImageGetBytesPerRow(maskRef), 
            CGImageGetDataProvider(maskRef), NULL, false); 

CGImageRef masked = CGImageCreateWithMask(imageGradient.CGImage, mask); 
CGImageRelease(mask); 

UIImage *maskedImage = [UIImage imageWithCGImage:masked scale:inputImage.scale orientation:0]; 
CGImageRelease(masked); 

Antwort

-1

Ich bin nicht ganz sicher, aber versuchen, diese Zeile zu ändern:

UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle.png"]; 

dazu:

UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle"]; 

oder naiv diese:

UIImage *toggleImage = [UIImage imageNamed:@"[email protected]"]; 

Das Ding ist: Ich denke, dass Sie es zwingen, Bild von niedriger Qualität zu verwenden, indem Sie es so zuweisen. Wenn Sie die Erweiterung überspringen, sucht Xcode automatisch nach dem Retina-Bild und weist es zu, falls eines existiert.

Ich kann mich aber auch irren, tut mir leid wenn ja.