从相机拍摄照片时,裁剪UIImage功能无法正常工作。

时间:2015-02-17 12:03:18

标签: ios objective-c xcode uiimage crop

Image that are taken using camera and set in square box . i want this bottle image from top to bottom我使用了裁剪图像的裁剪功能。当我从照片库拍摄照片但是当我使用相机拍照并裁剪图像时,这是很好的工作。裁剪功能给我一个错误的裁剪图像。

我的裁剪逻辑:

float zoomScale = 1.0 / [scrollView zoomScale];

CGRect rect;
rect.origin.x = [scrollView contentOffset].x * zoomScale;
rect.origin.y = [scrollView contentOffset].y * zoomScale;
rect.size.width = [scrollView bounds].size.width * zoomScale;
rect.size.height = [scrollView bounds].size.height * zoomScale;



UIImage *cropped = [self cropImage:imageView.image toRect:rect];//[UIImage imageWithCGImage:cr];

//CGImageRelease(cr);

return cropped;


static inline double radians (double degrees) {return degrees * M_PI/180;}

-(UIImage*)cropImage:(UIImage*)originalImage toRect:(CGRect)rect{

CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect);

CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
CGContextRef bitmap = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);

if (originalImage.imageOrientation == UIImageOrientationLeft) {
    CGContextRotateCTM (bitmap, radians(90));
    CGContextTranslateCTM (bitmap, 0, -rect.size.height);

} else if (originalImage.imageOrientation == UIImageOrientationRight) {
    CGContextRotateCTM (bitmap, radians(-90));
    CGContextTranslateCTM (bitmap, -rect.size.width, 0);

} else if (originalImage.imageOrientation == UIImageOrientationUp) {
    // NOTHING
} else if (originalImage.imageOrientation == UIImageOrientationDown) {
    CGContextTranslateCTM (bitmap, rect.size.width, rect.size.height);
    CGContextRotateCTM (bitmap, radians(-180.));
}

CGContextDrawImage(bitmap, CGRectMake(0, 0, rect.size.width, rect.size.height), imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);

UIImage *resultImage=[UIImage imageWithCGImage:ref];
CGImageRelease(imageRef);
CGContextRelease(bitmap);
CGImageRelease(ref);

return resultImage;
}

我的代码有什么问题? 从相机拍摄的图像不合适。 请解决。

我希望整瓶图像在我必须设置的第一张图片中看到,但是当我按下裁剪按钮并给我一个错误的图像。见第二张图片。

But After crop the image crop something wrong.

0 个答案:

没有答案