2011-07-25 35 views
0

我想剪辑一部分使用相机拍摄的图像。这里是我的剪报代码:使用clipToMask时,图像旋转了90度

- (UIImage*) maskImage:(UIImage *)image { 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

UIImage *maskImage = [UIImage imageNamed:@"mask3.png"]; 
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/ image.size.width; 

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

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


CGContextClipToMask(mainViewContentContext, rect1, maskImageRef); 
CGContextDrawImage(mainViewContentContext, rect2, image.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; 

}

我打电话以上在我的ViewController我captureNow方法方法。我使用AVFoundation捕获静止图像:

-(void) captureNow 
{ 

AVCaptureConnection *videoConnection = nil; 
for (AVCaptureConnection *connection in stillImageOutput.connections) 
{ 
    for (AVCaptureInputPort *port in [connection inputPorts]) 
    { 
     if ([[port mediaType] isEqual:AVMediaTypeVideo]) 
     { 
      videoConnection = connection; 
      break; 
     } 
    } 
    if (videoConnection) { break; } 
} 

NSLog(@"about to request a capture from: %@", stillImageOutput); 



[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) 
{ 


    NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; 
    UIImage *image = [[UIImage alloc] initWithData:imageData]; 



    [testImageView setImage:[self maskImage:image]]; 


    self.firstPieceView.frame = CGRectMake(0, 0, 320, 480); 

    self.firstPieceView.contentMode = UIViewContentModeScaleAspectFill; 
    // self.firstPieceView.image = image; 

    // [firstPieceView setNeedsDisplay]; 

    NSLog(@"self.firstPiece.frame is %@", NSStringFromCGRect(self.firstPieceView.frame)); 
    // [myView becomeFirstResponder]; 

    }]; 

self.previewParentView.hidden = YES; 
self.photoBtn.hidden=YES; 
self.imageMask.hidden = NO; 

//add the gesture after taking the first image. 
[myView addGestureRecognizersToPiece:self.myView]; 

}

出于某种原因,我的形象始终是旋转90度时,我将它夹。有谁知道为什么以及如何解决这个问题?提前致谢。

+0

我有一个非常类似的问题,似乎无法想象它拯救了我的生活。这里是我问的问题:http://stackoverflow.com/questions/10307521/ios-png-image-rotated-90-degrees 你最终搞清楚了吗? – Boeckm

回答

1

这里的替代解决方案旋转图片90度,它的代码是波纹管......

yourImageView.transform = CGAffineTransformMakeRotation(3.14159265/2); 
当你想分享或保存当时的画面

只是将图像旋转90°,并且如果然后需要的180度....

这是另一种解决方案,如果我有任何其他的想法的话,我会再次发布... 希望,这帮助你...

:)