我有一个带有alpha通道的位图,显示不规则形状。我尝试缩放和移动形状以适合给定半径的圆。任何想法如何以有效的方式做到这一点?这将不得不在运行时进行计算。将不规则形状拟合成圆形
精度可以是1..2个像素,更重要的是不要切掉形状。我想可以通过逐步调整偏移量和比例值,绘制和检查碰撞来完成,但这听起来很贵。
解决方案涉及斯威夫特/ iOS版不胜感激...
我有一个带有alpha通道的位图,显示不规则形状。我尝试缩放和移动形状以适合给定半径的圆。任何想法如何以有效的方式做到这一点?这将不得不在运行时进行计算。将不规则形状拟合成圆形
精度可以是1..2个像素,更重要的是不要切掉形状。我想可以通过逐步调整偏移量和比例值,绘制和检查碰撞来完成,但这听起来很贵。
解决方案涉及斯威夫特/ iOS版不胜感激...
你只需要适应图像周围的矩形(我假设图像大小切成只是围住形象没有任何白边)进入圈子。正如你所知道的圈子(我希望)的半径,对于图像的比例系数应该是
scaleFactor = (circle diameter)/(longest diagonal of image)
然后集中在圆和完成缩放后的图像。
作为第一步,扫描图像以找到所有前景像素,并计算它们的凸包(使用monotone chain方法,以线性时间O(N),因为您可以按排序顺序检测点)。这将大大减少要考虑的点数。
然后你可以找到smallest enclosing circle,它可以在线性时间O(H)中构造。
查找“最小包围圆Nayuki”什么似乎是一个干净的执行随机算法。
由于语言的年轻化,恐怕你会在Swift中找到很少的算法资源。 –
是的,这是一个可能的解决方案,但它可能会放弃几个像素。在我描述的例子中,看看右上角。国旗的边界框会清晰地显示在灰色区域,因此您提案的缩放比所需的小。更为极端的例子是等边三角形或圆形。 – Stefan
我正在纠正... – TheEye
当然,您还会遇到图像的附加问题,即不能按比例放大以适应圆圈,在这种情况下,您还必须定义适合图像的哪个尺寸。 – TheEye