2013-07-03 10 views
6

Voglio mascherare un'immagine passando un'altra immagine come maschera. Sono in grado di mascherare l'immagine ma l'immagine risultante non ha un bell'aspetto. È frastagliato alle frontiere.IOS: mascheramento di un'immagine che tiene conto del fattore di scala della retina

Immagino che il problema sia legato alla grafica retina. La proprietà di scala per le due immagini sono diverse come:

  1. l'immagine da cui voglio maschera ha un valore di scala 1. Questa immagine ha generalmente una risoluzione maggiore di 1000x1000 pixel.
  2. L'immagine in base alla quale voglio che l'immagine risultante (l'immagine abbia solo colori bianco e nero) ha il valore di scala 2. Questa immagine è generalmente di risoluzione 300x300 pixel.

L'immagine risultante ha un valore di scala 1.

Il codice che sto usando è:

+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

CGImageRef maskRef = maskImage.CGImage; 

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


CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
CGImageRelease(mask); 
UIImage *maskedImage = [UIImage imageWithCGImage:masked ]; 
CGImageRelease(masked); 
return maskedImage; 
} 

Come posso ottenere un'immagine mascherata che segue scala retina?

+0

Si dovrebbe considerare convalidare una risposta se ti ha aiutato. – kokluch

+0

Ho fatto questa domanda il 3 luglio 2013 e la prima risposta è stata l'8 gennaio. Tra allora mi sono spostato su diversi progetti e non ho controllato se la risposta ha aiutato o meno e se non sono sicuro allora come posso accettare qualche risposta. Voglio solo chiudere la domanda ma non so come farlo. –

+0

Non così difficile da trovare ... – kokluch

risposta

5

Ho avuto lo stesso problema. Sembra che questa linea ignori il fattore di scala.

UIImage *maskedImage = [UIImage imageWithCGImage:masked]; 

Quindi è necessario disegnare l'immagine da soli. Sostituirlo dal seguente:

UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); 

CGContextDrawImage(context, rect, masked); 

UIImage * maskedImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Funziona bene da parte mia.

EDIT

O

UIImage * maskedImage = [UIImage imageWithCGImage:masked 
              scale:[[UIScreen mainScreen] scale] 
             orientation:UIImageOrientationUp]; 
4

Si può fare

UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp]; 
Problemi correlati