2009-06-04 3 views
1

Я пытаюсь замаскировать изображение с помощью «изображения маски». В первый раз он работал нормально. Но когда я пробую еще один раз в приложении с тем же изображением маски, приложение аварийно завершает работу. При попытке с другим изображением маски он отлично работает. Почему это происходит?Сбой при маскировании изображения

Консоль показывает <Error>: CGImageMaskCreate: invalid mask bits/component: 4294967295.

- (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); 
    UIImage *img2=[UIImage imageWithCGImage:masked]; 

    CGImageRelease(maskRef); 
    CGImageRelease(mask); 
    CGImageRelease(masked); 

    return img2; 
} 

fun1() 
{ 
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]]; 
} 

fun2() 
{ 
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]]; view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image3.png"]]; 
} 

fun3() 
{ 
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]]; 
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]]; 
} 

При вызове fun1 и fun2, apllication работает отлично. Приложение сбой при вызове fun3.

+0

Это звучит как-то высвобождается из-под вас, но без более подробно или образец кода, который я не знаю, как мы сможем ответить на ваш вопрос. –

+0

У вас есть ошибка GDB? Запустите программу в режиме отладки, и я должен указать ошибку –

ответ

1

Почему вы выпускаете maskRef? Вы не должны, потому что yo не сохранил его.

1

Вот то, что вы пытаетесь сделать, без утечки памяти или сбоев:

- (UIImage*) maskImage:(UIImage *)image 
       withMask:(UIImage *)maskImage 
{ 
     CGImageRef imageRef = image.CGImage; 
     CGImageRef maskRef = maskImage.CGImage; 
     CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
             CGImageGetHeight(maskRef), 
             CGImageGetBitsPerComponent(maskRef), 
             CGImageGetBitsPerPixel(maskRef), 
             CGImageGetBytesPerRow(maskRef), 
             CGImageGetDataProvider(maskRef), 
             NULL, // decode should be NULL 
             FALSE // shouldInterpolate 
            ); 

     CGImageRef masked = CGImageCreateWithMask(imageRef, mask); 
     CGImageRelease(mask); 
     UIImage *maskedImage = [UIImage imageWithCGImage:masked]; 
     CGImageRelease(masked); 
     return maskedImage; 
} 
Смежные вопросы