1

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

我尝试了如下代码块

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

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

CGImageRelease(imageRef);

但有两个问题

  1. 任何裁剪的图像都变得太大
  2. 方向更改为 -90。

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

在此处输入图像描述

4

1 回答 1

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);
    

不同方向的问题是 CoreGraphics 使用不同的坐标系,而不是视图的坐标系。石英 2D 坐标系,所以尝试设置

   [UIImage imageWithCGImage:imageRef].imageOrientation = largeImage.imageOrientation
于 2015-05-05T15:39:49.373 回答