裁剪图像与欲望矩形

时间:2015-05-05 15:19:03

标签: ios ios-camera

很多问题都可以在SO上找到,但遗憾的是我无法解决使用它们的问题。 我在相机上添加了叠加视图,现在想要在蓝色边框(只有水瓶)内获取图像。

我尝试了代码块,如下面的

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);

[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 

CGImageRelease(imageRef);

但有两个问题

  1. 裁剪的图像太大了
  2. 方向更改为-90。
  3. 对于第1点,我认为我提供的cropRect太小了,这就是为什么它显示非常小的部分图像时视图太小。在我的另一个viewController我有UIImageView(需要显示裁剪的图像)与蓝色边框内的相机rect相同的大小。 所以问题是如何裁剪图像以及我应该为cropRect提供什么值?

    enter image description here

1 个答案:

答案 0 :(得分:0)

假设图像尺寸为1280 * 1080且裁剪视图尺寸为320 * 480,则需要执行以下操作

  1. 通过查找比例因子将裁剪视图的帧转换为图像大小rect(0,0,1280,1080)

    float xScale = 1280 / 320;
    float yScale = 1080 / 480;
    
    float scaleFactor = (xScale < yScale) ? xScale : yScale;
    
  2. 按比例因子乘以cropView框架。这会将屏幕坐标映射到图像大小坐标。然后使用带有

    的新cropRect
    CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
    
  3. 不同方向的问题是,与视图的坐标系相比,CoreGraphics使用不同的坐标系。 Quartz 2D Coordinate Systems请尝试设置

       [UIImage imageWithCGImage:imageRef].imageOrientation = largeImage.imageOrientation