我可以获取图像的像素值并裁剪其黑色部分。例如,我有这个图像:
。
我想要这样的东西
没有黑色部分。
关于如何做到这一点的任何可能的解决方案?任何库/代码?
我正在使用Objective C.
我已经看到了类似问题的solution,但我对此并不详细。请提供详细步骤。感谢。
答案 0 :(得分:1)
执行此操作的最快方法可能是迭代图像并找到不是黑色的边框像素。然后将图像重新绘制到剪切由边框像素接收的矩形的新上下文。
边框像素我指的是最左边,最顶部,最底部和最右边的像素。您可以找到一种从UIImage
获取原始RGBA缓冲区的方法,然后您可以通过该缓冲区遍历宽度和高度并在适当时设置边框值。这意味着,例如,为了获得leftMostPixel
,您首先将其设置为某个较大的值(或图像宽度),然后在迭代中,如果像素不是黑色,并且leftMostPixel > x
则leftMostPixel = x
}。
现在您有4个边界值,您可以从中创建一个框架。要重新绘制目标矩形,您可以使用具有上下文的各种工具,但最简单的方法是创建具有边界矩形大小的视图,并将图像视图与原始图像的大小放在一起,并创建视图的屏幕截图。图像视图原点必须减去有界矩形的原点(我们把它放在屏幕外一点)。
您可能会遇到图像方向的一些问题。如果图像将具有其他方向,则up
原始数据将不会遵循该方向。因此,在创建有界矩形时需要考虑到这一点...或者首先重绘图像以使其正确定向...或者您甚至可以使用RGBA数据创建子缓冲区并从那些创建CGImage
数据并将相同的方向应用于输出UIImage
,与输入相同。
因此,在获得界限后,有很多程序。有些更慢,有些需要更多内存,有些则难以编码并且有边缘情况。