我正在用充电器填充iPad上的一个彩色应用程序。
这个应用程序基本上是在图像的黑线内填充颜色,我可以做到这一点,没有问题,但它太慢了。
我首先使用递归的flood fill,它的性能是最差的(由于堆栈溢出),然后我可以用下面的代码使用stack将其转换为迭代的,但是这太慢了

-(void)floodFillAtPoint:(CGPoint)atPoint
 {
Stack *stack = [[Stack alloc] init];

[stack push:[StackPoint pointWithPoint:atPoint]];
StackPoint *currentPoint = nil;
int counter = 0;
while ((currentPoint = [stack pop]))
{
    CGPoint aPoint = currentPoint.point;//CGPointMake(pointPixel.x, pointPixel.y);
    [self setColorAtPoint:aPoint];
    CGPoint bPoint = aPoint;
    bPoint.x+=1;
    if([self checkForValidRegionAtPoint:bPoint])
        [stack push:[StackPoint pointWithPoint:bPoint]];
    bPoint = aPoint;
    bPoint.x-=1;
    if([self checkForValidRegionAtPoint:bPoint])
        [stack push:[StackPoint pointWithPoint:bPoint]];
    bPoint = aPoint;
    bPoint.y+=1;
    if([self checkForValidRegionAtPoint:bPoint])
        [stack push:[StackPoint pointWithPoint:bPoint]];
    bPoint = aPoint;
    bPoint.y-=1;
    if([self checkForValidRegionAtPoint:bPoint])
        [stack push:[StackPoint pointWithPoint:bPoint]];
    counter++;
}
[stack release];

}

有人会建议一种在ipad设备上最有效的替代方法吗?

最佳答案

使用objective-c对象来表示每一个像素将非常缓慢,而且没有什么好处。
使用不同的数据结构来表示位图,类似于各种cg*位图封装机制之一。然后直接旋转位图中的位。会越来越快。

关于iphone - iPad充水太慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5931552/

10-09 06:40