2015-05-03 109 views
1

我的应用使用相机,它处理每一帧,寻找图像内部的一些元素(如脸部)。将视频帧的长宽比转换为屏幕尺寸

当我在图像上找到某些东西时,我想在自定义视图的drawRect:(CGRect)rect屏幕上绘制显示视频。

我不是只绘制矩形,我没有使用GPU和GLKView。 当我用1920 * 1080运行视频帧时,我可以通过将屏幕宽度和高度除以视频帧大小来绘制确切位置。

但是,当我更改为480 * 360视频分辨率时,元素未绘制在正确的位置,我相信由于纵横比差异。 任何想法我需要在这里做什么转换,也许AffineTransfrom?

回答

2

是的。这是由于宽高比。在我的一个项目中,我遇到了类似的问题,我做了以下工作。

  1. 查找缩放因子

    浮子xScale等= destionation.size.width/imageSize.width; //目的地是最大图像绘制区域。

    float yScale = destionation.size.height/imageSize.height;

    float scaleFactor = xScale < yScale? xScale:yScale;

  2. 查找绘制矩形由

    浮子destinationHeight = destionation.size.height *比例因子;

    float destinationWidth = destionation.size.width * scaleFactor;

    这会给你一个矩形,它可以保持图像的高宽比。并使用此矩形绘制图像。您也可以通过将中心点与比例因子相乘来将此矩形对齐到视图的中心。

  3. 现在通过乘以比例因子将您的脸部矩形从图像大小转换为绘制矩形。

  4. 使用转换后的点在目标矩形上绘制矩形。