在UIImage上执行floodfill

时间:2013-01-17 18:33:48

标签: ios objective-c uiimage core-graphics flood-fill

我试图在具有不透明度的UIImage上执行Floodfill。我尝试用CG(http://en.wikipedia.org/wiki/Flood_fill)实现4路洪水填充,但是读取像素颜色和着色像素会使它太慢。填充300x100px区域需要一分多钟。我需要一个像:

这样的函数
-(UIImage*)floodFillOnImage:(UIImage*)image fromPoint:(CGPoint)start;

足够快。

是否有人在Objective-C中使用UIImages进行泛洪填充算法的工作实现或想法?我在一些iOS绘图应用程序中看到过这样的油漆桶工具。

1 个答案:

答案 0 :(得分:6)

如果花费超过一分钟来填充300×100图像,则获取和设置像素值的实现效率可能非常低。如果您将图像绘制到位图上下文中,然后直接访问(并修改)像素数据,则速度应该快得多。

基本方法是分配一个内存缓冲区(4个(rgba)×宽度×高度字节的C数组),将其传递给CGBitmapContextCreate,将源图像绘制到上下文中(例如使用{{ 1}}),然后直接在缓冲区上操作(像素值)。完成后,您可以使用CGContextDrawImage从上下文创建图像。