使用CGImageCreateWithImageInRect裁剪图像

时间:2012-10-07 15:37:56

标签: iphone objective-c ios

我正在尝试实现iOS相机视图,该视图拍摄方形的图片(类似于Instagram)。我的代码如下所示。框架高度设置为等于框架宽度的第一部分按预期工作,并为用户提供方形视图。当我尝试使用CGImageCreateWithImageInRect将帧(它是CGRect属性)应用于图像数据时,会出现此问题。我使用图像将帧rect传递给此方法。但结果并没有被裁剪成方形。而是图像保留iOS相机的原始默认尺寸。有人可以告诉我我做错了什么吗?我从Apple文档中了解到,CGImageCreateWithImageInRect应从一些起始x / y坐标中选择形状为Rect的图像区域。但这似乎并没有发生。

//Set the frame size to be square shaped
UIView *view = imagePicker.view;
        frame = view.frame;
        frame.size.height = frame.size.width;
        view.frame = frame;

//Crop the image to the frame dimensions using CGImageCreateWithImageInRect
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self.popoverController dismissPopoverAnimated:true];

NSString *mediaType = [info
                       objectForKey:UIImagePickerControllerMediaType];
[self dismissModalViewControllerAnimated:YES];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
    UIImage *image = [info
                      objectForKey:UIImagePickerControllerOriginalImage];

    croppedImage = (__bridge UIImage *)(CGImageCreateWithImageInRect((__bridge CGImageRef)(image), frame));

    imageView.image = croppedImage;

}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
    // Code here to support video if enabled
}
}

2 个答案:

答案 0 :(得分:0)

你做得对。唯一的一点是我认为你设置的框架属性与选择器视图相同,所以最终尺寸与原始尺寸相同。

尝试将帧设置为小于pickerView.view.frame,不等于

检查出来

Cropping an UIImage

答案 1 :(得分:0)

您正在设置错误的帧。 我建议你看一下Apple的示例代码,了解如何创建你想要的东西:

https://developer.apple.com/library/mac/#samplecode/VirtualScanner/Listings/Sources_VirtualScanner_m.html#//apple_ref/doc/uid/DTS40011006-Sources_VirtualScanner_m-DontLinkElementID_9

看看:

- (ICAError)startScanningWithParams:(ICD_ScannerStartPB*)pb

功能