2

我正在尝试对具有不透明度的 UIImage 执行填充。我尝试使用 CG(http://en.wikipedia.org/wiki/Flood_fill)实现 4-Way Floodfill,但读取像素颜色和着色像素会使其太慢。填充 300x100 像素的区域需要一分钟多的时间。我需要一个类似的功能:

-(UIImage*)floodFillOnImage:(UIImage*)image fromPoint:(CGPoint)start;

这已经足够快了。

是否有人对与 UIImages 一起使用的 Objective-C 中的洪水填充算法有一个可行的实现或想法?我在一些 iOS 绘图应用中看到过这样的油漆桶工具。

4

2 回答 2

6

如果填充 300×100 图像需要一分钟以上的时间,那么获取和设置像素值的实现可能效率极低。如果将图像绘制到位图上下文中,然后直接访问(和修改)像素数据,它应该会快很多。

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

于 2013-01-17T19:22:12.957 回答
1

我正在尝试对具有不透明度的 UIImage 执行填充。

您是否试图填充清晰的区域?如果是这样,那么有一个更简单的解决方案:创建一个上下文,用所需的颜色填充它,在顶部绘制图像,然后从上下文中提取完成的图像。

如果您尝试填充清晰的区域,那么也有一个解决方案:创建一个上下文,首先将图像绘制到其中,将上下文的混合模式设置为source in,填充颜色,然后提取完成的图像。

于 2013-01-18T05:59:20.870 回答