寻找具有透明背景的旋转图像的边界框
Posted
技术标签:
【中文标题】寻找具有透明背景的旋转图像的边界框【英文标题】:Finding Bounding Box of Rotated Image that has Transparent Background 【发布时间】:2013-01-27 15:08:04 【问题描述】:我有一个具有透明背景的UIImage
。旋转此图像时,我想找到图形周围的边界框(即非透明部分,如果您在UIImageView
中旋转它,它将找到整个UIImage
周围的边界框,包括透明部分)。
有没有可以为我做这件事的 Apple 库?如果没有,有谁知道如何做到这一点?
【问题讨论】:
【参考方案1】:如果我正确理解了您的问题,您可以检索 uiimageview 的框架(不是边界),然后获取各个 cgpoints 并显式转换这些点以获得转换后的矩形。因为在 Apple 的文档中它说:您可以通过调用函数 CGRectApplyAffineTransform 对 CGRect 结构进行操作。此函数返回包含传递给它的矩形的变换角点的最小矩形。 1 逐 1 变换点应该避免这种自动更正行为。
CGRect originalFrame = UIImageView.frame;
CGPoint p1 = originalFrame.origin;
CGPoint p2 = p1; p2.x += originalFrame.width;
CGPoint p3 = p1; p3.y += originalFrame.height;
//Use the same transformation that you applied to uiimageview here
CGPoint transformedP1 = CGPointApplyAffineTransform(p1, transform);
CGPoint transformedP2 = CGPointApplyAffineTransform(p2, transform);
CGPoint transformedP3 = CGPointApplyAffineTransform(p3, transform);
现在您应该能够从这 3 个点定义一个新矩形(第 4 个是可选的,因为可以从 3 个点计算宽度和高度。需要注意的一点是,您不能将这个新矩形存储在 cgrect 中,因为 cgrect由原点和大小定义,因此其边缘始终平行于 x 和 y 轴。Apple 的 cgrect 定义不允许存储旋转的矩形。
【讨论】:
感谢您长时间、深思熟虑的回复。这很难解释。我不仅对旋转的 UIImage 周围的边界框感兴趣(你可以从 UIImageView 框架中得到它)。我实际上需要它围绕 UIImage 中的图形。想我可能需要一张位图或其他东西。不过,感谢您抽出宝贵时间。 那么也许你可以像这里解释的那样去 smt ***.com/questions/144250/…以上是关于寻找具有透明背景的旋转图像的边界框的主要内容,如果未能解决你的问题,请参考以下文章