2012-06-06 3 views
4

, 나는 다음과 같이 수행 할 결과 이미지 마스크 :아이폰 OS 캡처 화면은 다음 자르고 내 응용 프로그램에서

1 - 화면 캡처를,이 부분은 나를 위해, 나는 다음을 사용하고 아무 문제가 없다 코드 :

- (UIImage *)captureScreen { 
    UIGraphicsBeginImageContextWithOptions(self.view.frame.size, YES, 0.0f); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 

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

    return image; 
} 

2 - 나는

- (UIImage *)cropImage(UIImage *)image inRect:(CGRect)rect { 
    CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, rect); 
    UIImage *resultImage = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 

    return resultImage; 
} 

3이 기능을 사용하여 이미지를 잘립니다 - 그럼 난 순수한 검은 색과 흰색 마스크로 자른 이미지를 마스크

- (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 maskedRef = CGImageCreateWithMask([image CGImage], mask); 
    UIImage *resultImage = [UIImage imageWithCGImage:maskedRef]; 
    CGImageRelease(mask); 
    CGImageRelease(maskedRef); 

    return resultImage; 
} 

그러나 내가 얻은 결과 이미지는 마스크 모양을 벗어나면 투명하지 않고 이미지가 검은 색으로 표시된다는 것입니다. 아무도 나를 도울 수 있습니까?

답변

2

내 문제를 해결하기 위해 마스크 할 이미지의 알파 채널 때문입니다. 따라서 마스킹하기 전에 알파 채널이있는 다른 UIImage를 만들고 단계를 계속 진행합니다.

알파와있는 UIImage 만드는 코드

- (UIImage *)imageWithAlpha { 
    CGImageRef imageRef = self.CGImage; 
    CGFloat width = CGImageGetWidth(imageRef); 
    CGFloat height = CGImageGetHeight(imageRef); 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(nil, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedFirst); 
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 

    CGImageRef resultImageRef = CGBitmapContextCreateImage(context); 
    UIImage *resultImage = [UIImage imageWithCGImage:resultImageRef scale:self.scale orientation:self.imageOrientation]; 

    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace); 
    CGImageRelease(resultImageRef); 

    return resultImage; 
} 
2

이 작품은 나를 위해. 그것이 당신을 위해 또한 작동하기를 바랍니다.

- (UIImage*) doImageMask:(UIImage *)mainImage:(UIImage*)maskImage{ 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

CGImageRef maskImageRef = [maskImage CGImage]; 

// create a bitmap graphics context the size of the image 
CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast); 


if (mainViewContentContext == NULL){ 
    return NULL; 
} 

CGFloat ratio = 0; 

ratio = maskImage.size.width/ mainImage.size.width; 

if(ratio * mainImage.size.height < maskImage.size.height) { 
    ratio = maskImage.size.height/ mainImage.size.height; 
} 

CGRect rect1 = {{0, 0}, {maskImage.size.width, maskImage.size.height}}; 
CGRect rect2 = {{-((mainImage.size.width*ratio)-maskImage.size.width)/2 , -((mainImage.size.height*ratio)-maskImage.size.height)/2}, {mainImage.size.width*ratio, mainImage.size.height*ratio}}; 

CGContextClipToMask(mainViewContentContext, rect1, maskImageRef); 
CGContextDrawImage(mainViewContentContext, rect2, mainImage.CGImage); 

// Create CGImageRef of the main view bitmap content, and then 
// release that bitmap context 
CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext); 
CGContextRelease(mainViewContentContext); 

UIImage *theImage = [UIImage imageWithCGImage:newImage]; 

CGImageRelease(newImage); 

// return the image 
return theImage; 
}