Öğretici bu yöntemi iki parametreyle kullanır: image
ve maskImage
bunları, yöntemi çağırdığınızda ayarlamanız gerekir. Yöntemin aynı sınıfta olduğunu ve resimlerin paketinizde olduğunu varsayarak, örnek bir çağrı şöyle görünebilir:
Not - şaşırtıcı bir şekilde görüntülerin aynı boyutta olması bile gerekmez.
...
UIImage *image = [UIImage imageNamed:@"dogs.png"];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
// result of the masking method
UIImage *maskedImage = [self maskImage:image withMask:mask];
...
- (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 maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
// returns new image with mask applied
return maskedImage;
}
Kodunuzu verdikten sonra, referans olması için yorum olarak bazı numaralar ekledim. Hala iki seçeneğiniz var. Bütün bunlar bir yerde aradığınız bir yöntem. İçindeki görüntüleri yaratmanıza gerek yoktur: bu, yöntemin yeniden kullanılabilirliğini sıfıra indirir.
Kodunuzun çalışmasını sağlamak için. Yöntem başlığını ( 1. ) olarak değiştirin.
- (UIImage *)maskImageMyImages {
Ardından 2. adımda değişkenin adını değiştirin .
UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
Yöntem, maskelenmiş görüntülerinizi geri döndürecektir, böylece bu yöntemi bir yerde çağırmanız gerekecektir. Metodunuzu çağırdığınız kodu bize gösterebilir misiniz?