2012-05-19 2 views

답변

19

,

UIImage *image = [UIImage imageNamed:@"yourImage.png"]; 
CGImageRef tmpImgRef = image.CGImage; 
CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, image.size.width, image.size.height/2.0)); 
UIImage *topImage = [UIImage imageWithCGImage:topImgRef]; 
CGImageRelease(topImgRef); 

CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, image.size.height/2.0, image.size.width, image.size.height/2.0)); 
UIImage *bottomImage = [UIImage imageWithCGImage:bottomImgRef]; 
CGImageRelease(bottomImgRef); 

희망이 당신을 도울 수, :)

+0

큰 활약을했습니다. 감사! – Shredder2794

0

다른 질문 Stackoverflow 질문 당신이 시도 할 수 Source

UIImage *splitMeInTwo = [UIImage imageNamed:@"Star.png"]; 

UIImageView *original = [[UIImageView alloc] initWithImage:splitMeInTwo]; 
[self.view addSubview:original]; 
[original release]; 

// The size of each part is half the height of the whole image 
CGSize size = CGSizeMake([splitMeInTwo size].width, [splitMeInTwo size].height/2); 

// Create image-based graphics context for top half 
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

// Draw into context, bottom half is cropped off 
//[image drawAtPoint:CGPointMake(0.0,0.0)]; 
[splitMeInTwo drawAtPoint:CGPointMake(0.0,0.0) blendMode:kCGBlendModeNormal alpha:1.0]; 

// Grab the current contents of the context as a UIImage 
// and add it to our array 
UIImage *top = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageView *topV = [[UIImageView alloc] initWithImage:top]; 
CGRect frameTop = topV.frame; 
frameTop.origin.x += 360.0f; 
topV.frame = frameTop; 
[self.view addSubview:topV]; 
[topV release]; 

UIGraphicsEndImageContext(); 
5
- (void)splitImage:(UIImage *)image 
{ 
    CGFloat imgWidth = image.size.width/2; 
    CGFloat imgheight = image.size.height; 

    CGRect leftImgFrame = CGRectMake(0, 0, imgWidth, imgheight); 
    CGRect rightImgFrame = CGRectMake(imgWidth, 0, imgWidth, imgheight); 

    CGImageRef left = CGImageCreateWithImageInRect(image.CGImage, leftImgFrame); 
    CGImageRef right = CGImageCreateWithImageInRect(image.CGImage, rightImgFrame); 

    // These are the images we want! 
    UIImage *leftImage = [UIImage imageWithCGImage:left]; 
    UIImage *rightImage = [UIImage imageWithCGImage:right]; 

    // Don't forget to free the memory! 
    CGImageRelease(left); 
    CGImageRelease(right); 
} 
+0

이것은 전체 컨텍스트를 생성하지 않는 유일한 대답입니다. Quartz는 자르기 과정을 최적화 할 때 새로운 컨텍스트 만들기, 이미지 그리기, 자르기 대신 이미지의 픽셀 데이터를 바로 가져 오는 작업을 훌륭하게 수행합니다. 이미지를 여러 개의 작은 부분으로 나누면 잠재적으로 여러 번 더 빨라집니다! –

0

아이폰 OS (11), 신속한 4.0 솔직히 생각 버전 https://stackoverflow.com/users/893872/durul-dalkanat이 업데이트 된 최고 :

이렇게하면 이미지가 4 부분으로 나뉩니다.

func splitImage(image2D: UIImage) -> [UIImage] { 
    let imgWidth = image2D.size.width/2 
    let imgHeight = image2D.size.height/2 
    var imgImages:[UIImage] = [] 

    let leftHigh = CGRect(x: 0, y: 0, width: imgWidth, height: imgHeight) 
    let rightHigh = CGRect(x: imgWidth, y: 0, width: imgHeight, height: imgHeight) 
    let leftLow = CGRect(x: 0, y: imgHeight, width: imgWidth, height: imgHeight) 
    let rightLow = CGRect(x: imgWidth, y: imgHeight, width: imgWidth, height: imgHeight) 

    let leftQH = image2D.cgImage?.cropping(to:leftHigh) 
    let rightHQ = image2D.cgImage?.cropping(to:rightHigh) 
    let leftQL = image2D.cgImage?.cropping(to:leftLow) 
    let rightQL = image2D.cgImage?.cropping(to:rightLow) 

    imgImages.append(UIImage(cgImage: leftQH!)) 
    imgImages.append(UIImage(cgImage: rightHQ!)) 
    imgImages.append(UIImage(cgImage: leftQL!)) 
    imgImages.append(UIImage(cgImage: rightQL!)) 

    return imgImages 
} 
관련 문제