裁剪图像

时间:2014-07-08 20:48:53

标签: ios uiimage

我使用两种不同的方法裁剪出此图像的中心方块。一个工作,一个不工作。我的问题是为什么。

enter image description here

以下是两个结果: enter image description here

显然,左边是马车,右边有效。

您在左侧看到的图片仅使用CGImageCreateWithImageInRect 选择图像的区域,其中矩形按比例缩放 原始图像尺寸与视图尺寸的尺寸相同。 为什么这种方法不起作用?

您在右侧看到的图像会翻译图像,然后选择区域 感兴趣的是使用CGImageCreateWithImageInRect

来源于0,0

以下是绘制两张图片的代码:

- (UIImage *)cropImage:(UIImage *)original inRect:(CGRect)rect {
    CGFloat heightScale = original.size.height / self.view.frame.size.height;
    CGFloat widthScale = original.size.width / self.view.frame.size.width;
    CGRect scaledRect = CGRectMake(rect.origin.x * widthScale, rect.origin.y * heightScale, rect.size.width * widthScale, rect.size.height * heightScale);

    UIGraphicsBeginImageContextWithOptions(original.size, YES, 1.0);
    [original drawAtPoint:CGPointMake(-scaledRect.origin.x, -scaledRect.origin.y)];
    UIImage *translatedImage = UIGraphicsGetImageFromCurrentImageContext();

    CGRect finalRect = CGRectMake(0, 0, scaledRect.size.width, scaledRect.size.height);
    CGImageRef imageRefForRightImage = CGImageCreateWithImageInRect([translatedImage CGImage], finalRect);
    CGImageRef imageRefForLeftImage = CGImageCreateWithImageInRect([original CGImage], scaledRect);

    UIImage *croppedRightImage = [UIImage imageWithCGImage:imageRefForRightImage];
    UIImage *croppedLeftImage = [UIImage imageWithCGImage:imageRefForLeftImage];

    CGImageRelease(imageRefForRightImage);
    CGImageRelease(imageRefForLeftImage);

    UIImageView *colorImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    colorImageView.backgroundColor = [UIColor purpleColor];
    [self.view addSubview:colorImageView];

    CGRect rectLeft = CGRectMake(0, 0, 160, 160);
    CGRect rectRight = CGRectMake(160, 0, 160, 160);

    UIImageView *croppedImageViewLeft = [[UIImageView alloc] initWithFrame:rectLeft];
    UIImageView *croppedImageViewRight = [[UIImageView alloc] initWithFrame:rectRight];

    croppedImageViewLeft.image = croppedLeftImage;
    croppedImageViewRight.image = croppedRightImage;

    croppedImageViewLeft.contentMode = UIViewContentModeScaleAspectFit;
    croppedImageViewRight.contentMode = UIViewContentModeScaleAspectFit;

    [self.view addSubview:croppedImageViewLeft];
    [self.view addSubview:croppedImageViewRight];

    croppedImageViewRight.image = croppedRightImage;
    croppedImageViewLeft.image = croppedLeftImage;

    return croppedRightImage;
}

0 个答案:

没有答案