寻找具有透明背景的旋转图像的边界框

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/…

以上是关于寻找具有透明背景的旋转图像的边界框的主要内容,如果未能解决你的问题,请参考以下文章

纯色背景上的透明透明预加载器图像

Imagemagick 旋转透明图像上不需要的黑色背景

花式框和透明背景图像

旋转QImage时如何用透明背景填充空白?

具有不透明度的背景图像

将具有透明背景的图像上传到 azure blob 显示具有黑色背景的图像