获取图像的像素值并裁剪图像的黑色部分:目标C.

时间:2016-03-15 06:58:50

标签: ios objective-c xcode image image-processing

我可以获取图像的像素值并裁剪其黑色部分。例如,我有这个图像:

Image

我想要这样的东西

image

没有黑色部分。

关于如何做到这一点的任何可能的解决方案?任何库/代码?

我正在使用Objective C.

我已经看到了类似问题的solution,但我对此并不详细。请提供详细步骤。感谢。

1 个答案:

答案 0 :(得分:1)

执行此操作的最快方法可能是迭代图像并找到不是黑色的边框像素。然后将图像重新绘制到剪切由边框像素接收的矩形的新上下文。

边框像素我指的是最左边,最顶部,最底部和最右边的像素。您可以找到一种从UIImage获取原始RGBA缓冲区的方法,然后您可以通过该缓冲区遍历宽度和高度并在适当时设置边框值。这意味着,例如,为了获得leftMostPixel,您首先将其设置为某个较大的值(或图像宽度),然后在迭代中,如果像素不是黑色,并且leftMostPixel > xleftMostPixel = x }。

现在您有4个边界值,您可以从中创建一个框架。要重新绘制目标矩形,您可以使用具有上下文的各种工具,但最简单的方法是创建具有边界矩形大小的视图,并将图像视图与原始图像的大小放在一起,并创建视图的屏幕截图。图像视图原点必须减去有界矩形的原点(我们把它放在屏幕外一点)。

您可能会遇到图像方向的一些问题。如果图像将具有其他方向,则up原始数据将不会遵循该方向。因此,在创建有界矩形时需要考虑到这一点...或者首先重绘图像以使其正确定向...或者您甚至可以使用RGBA数据创建子缓冲区并从那些创建CGImage数据并将相同的方向应用于输出UIImage,与输入相同。

因此,在获得界限后,有很多程序。有些更慢,有些需要更多内存,有些则难以编码并且有边缘情况。