作物形象与欲望Rect

问题描述:

许多问题都可以在SO上,但不幸的是我无法解决我的问题,使用它们。 我在我的相机上添加了覆盖视图,现在想要在蓝色边框内(仅水瓶)获取图像。作物形象与欲望Rect

我试图代码块像下面

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

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

CGImageRelease(imageRef); 

,但有两个问题

  1. 无论是裁剪图像变得过于庞大
  2. 取向的变化为-90。

对于第1点,我想我提供的cropRect太小,这就是为什么它显示图像的一小部分太放大视图。在我的其他viewController我有UIImageView(其中裁剪图像需要显示)与蓝色边框内的相机矩形大小相同。 所以问题是如何裁剪图像,我应该提供什么值cropRect

enter image description here

假设图像尺寸1280 * 1080和您的作物视图的尺寸为320 * 480,您需要做以下

  1. 转换你的作物视图的帧图像尺寸矩形(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); 
    

不同方向的问题是,CoreGraphics中使用不同的坐标系作为比较,查看的坐标系。 Quartz 2D Coordinate Systems所以尝试设置

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

我需要在'cropRect'中提供什么值? – Ans

+0

假设图像大小为1280 * 1080并且裁切为{40,50,320,480}。通过{40 * scaleFactor,50 * scaleFactor,320 * scaleFactor,480 * scaleFactor}来转换croprect,并使用这个新矩形为'imageOrientation'剪辑 –

+0

它说'赋值为只读属性。' – Ans