标签: flood-fill

iPad中的洪水填充太慢了

我在iPad上使用Flood Filling作为我的一个Coloring应用程序.

该应用程序基本上填充图像的黑线内的颜色,我能够毫无问题地做到这一点,但它太慢了.

结论:

我终于设法使用以下Class为iPhone/iPad制作了可接受的Floodfill

请原谅任何僵尸代码:),建议改进总是欢迎

*如何使用* 创建CanvasView对象并设置originalImage(这应该是带有黑色线条的无色/彩色图像,黑色线条以外的区域必须是清晰的颜色),您可以在绘制后访问图像的coloredImage.

.h文件

-(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++;
} …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c flood-fill ipad

3
推荐指数
1
解决办法
1334
查看次数

递归 - 洪水填充算法

我需要编写一个泛洪填充算法,用于更大的代码,根据它们所在的房间,用不同颜色的水填充洞穴的特定单元格.

由于某种原因,我的递归算法不起作用,并一直告诉我,我超过了最大递归深度,我不知道为什么.

我试图逐个细胞,检查它是AIR,STONE还是WATER,如果它是STONE或WATER,我希望它什么都不做.如果它是AIR,我希望它填充该单元格.

谁能给我一些提示或建议?

#flood fill algorithm
def fill(cave, row, col, color):

    caveWidth = len(cave)
    caveHeigth = len(cave[0])


    if row > 0:
        fill(cave, row-1, col, color) #left
    if col > 0:
        fill(cave, row, col-1, color) #up
    if row < caveWidth-1:
        fill(cave, row+1, col, color) #right
    if col < caveHeigth-1:
        fill(cave, row, col+1, color) #down

    if cave[row][col] == STONE or cave[row][col] == WATER:
        return

    if cave[row][col] == AIR : 
        cave[row][col] = WATER
        grid.fill_cell(row, col, color)
Run Code Online (Sandbox Code Playgroud)

algorithm recursion flood-fill fill

3
推荐指数
1
解决办法
1645
查看次数

洪水填充Python

我对Flood Fill算法完全不熟悉.我从维基百科(http://en.wikipedia.org/wiki/Flood_fill)查看了它.但没有变得那么明智.我试图在以下情况下使用它.我有一个矩阵:

matrix = [["a", "a", "b", "a", "a", "b"],
          ["a", "b", "b", "a", "b", "b"],
          ["b", "a", "b", "a", "a", "b"],
          ["b", "a", "b", "a", "b", "b"],
          ["a", "a", "b", "a", "a", "a"],
          ["a", "b", "b", "a", "a", "b"]]
Run Code Online (Sandbox Code Playgroud)

然后我让用户从矩阵中决定一个点.如果在那个给定点上"b"没有做任何事情.在另一种情况下,如果在给定点,"a"我想在洪水填充算法的帮助下将该给定点和所有周围或连接点"a"改为"c".

例如,假设用户决定矩阵[0] [0].那么新的矩阵将是:

matrix = [["c", "c", "b", "a", "a", "b"],
          ["c", "b", "b", "a", "b", "b"],
          ["b", "a", "b", "a", "a", "b"],
          ["b", "a", "b", "a", "b", "b"],
          ["a", "a", …
Run Code Online (Sandbox Code Playgroud)

python algorithm function matrix flood-fill

3
推荐指数
1
解决办法
2万
查看次数

在UIImage上执行floodfill

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

-(UIImage*)floodFillOnImage:(UIImage*)image fromPoint:(CGPoint)start;
Run Code Online (Sandbox Code Playgroud)

这够快了.

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

core-graphics objective-c flood-fill uiimage ios

2
推荐指数
1
解决办法
2467
查看次数

Java中2d int数组优化的洪水填充

我正在编写自己的 Flood Fill 实现。

我想出了这个代码:

  public static void fillArea(int x, int y, int original, int fill, int[][] arr) {
        Stack<int[]> q = new Stack<int[]>();
        int[] w = new int[2]; //to the west
        int[] e = new int[2]; //to the east

        if (arr[x][y] != original) {
            return;
        }

        q.push(new int[]{x, y});

        while (!q.isEmpty()) {
            int[] pos = (int[]) q.pop();
            int i = pos[0];
            int j = pos[1];
            if (arr[i][j] == original) {
                e[0] = i;
                e[1] = j;
                w[0] = i; …
Run Code Online (Sandbox Code Playgroud)

java algorithm path-finding flood-fill

2
推荐指数
1
解决办法
3862
查看次数

洪水填充算法

即时通讯使用turbo C++在C中创建一个简单的图形库,因为我开发了一个非常原始的绘画风格程序版本,每个都运行良好,但我无法使洪水填充算法工作.我使用4路洪水填充算法,首先我尝试使用递归版本,但它只适用于小区域,填充大区域使其崩溃; 阅读我发现实现它的显式堆栈版本解决了问题,但我没有真正看到它.

我开发了这样的堆栈:

struct node
{
    int x, y;
    struct node *next;
};

int push(struct node **top, int x, int y)
{
    struct node *newNode;
    newNode = (struct node *)malloc(sizeof(struct node));
    if(newNode == NULL) //If there is no more memory
        return 0;
    newNode->x = x;
    newNode->y = y;
    newNode->next = *top;
    *top = newNode;
    return 1; //If we push the element correctly
}

int pop(struct node **top, int &x, int &y)
{
    if(*top == NULL) //If the stack is …
Run Code Online (Sandbox Code Playgroud)

c algorithm primitive flood-fill graphic

1
推荐指数
1
解决办法
9893
查看次数

是否可以在Delphi的Image组件上使用"Fill with color"功能?

我在表单上有一个TImage组件.我需要实现以下功能:

(如果鼠标指针在红色点上方,则将"填充颜色为绿色"应用于该点)

这里的"填充颜色"是指Paint的功能"填充颜色".TImage中有类似的东西吗?或者我应该自己实现这个功能?

谢谢

PS我使用Delphi 7

delphi image image-processing flood-fill

1
推荐指数
1
解决办法
2110
查看次数

FloodFill - 扫雷,需要说明

我正在尝试用Java制作一个类似扫雷的游戏,我已经完成了大部分工作,但我需要帮助的是FloodFill - http://en.wikipedia.org/wiki/Flood_fill.没有真正帮助......但有人可以解释它是如何工作的吗?我看过网上但我并不理解这个解释,所以我会在这里问一下会更容易.

在我的扫雷中,我有:

JButton[] btn = new JButton[100]//buttons being clicked and displaying the values/bombs
int[] mines = new int[100];//int array holding the values for each button.
Run Code Online (Sandbox Code Playgroud)

网格是10x10网格,所以说你点击的按钮是btn [14],

btn[4]  // north of btn[14](14-10)
btn[24] // south of btn[14](14+10)
btn[13] //  west of btn[14](14-1)
btn[15] //  east of btn[14](14+1)
Run Code Online (Sandbox Code Playgroud)

回到这个问题,有人可以向我解释一下吗?

编辑: 我将我的代码更改为2D,而不是上面的代码现在是

btn[1][4]//row one, column 4
Run Code Online (Sandbox Code Playgroud)

单击该按钮时,我希望它检查名为mines [] []的变量,该变量具有值,如果该值等于0(在初始单击的周围),则更改BG

btn[x][y].setBackground(Color.GRAY);
Run Code Online (Sandbox Code Playgroud)

java algorithm flood-fill

1
推荐指数
1
解决办法
3497
查看次数

游戏的平铺填充算法

背景:

我正在使用Javascript中基于图块的游戏,其中角色在地图周围自由移动(没有对角线 - 左/右/上/下)并且当他在地图上移动时填充图块.有三种图块类型 - 您填充的图块(蓝色),当前路径(红色)和空图块(黑色).也有在地图上移动的敌人(星星),但仅限于空白区域.目标是尽可能多地填充地图.

地图的大小约为40x40.地图外部周围有一个1瓦厚的边框,已经"填充"(蓝色).

我已经确定泛洪填充算法可以在需要时填充区域的区域.但是,我的问题如下:

问题陈述: 如果没有敌人,我想只填充地图的一部分.

我的问题: 我可以运行泛洪填充算法并在它到达敌人占用的区块时停止它 - 但是,这是最有效的方法(对于实时游戏)吗?
如果是,我如何以系统的方式确定从何处开始算法,因为有多个区域需要检查,并且角色不必在完美的直线上移动(可以向上/向下/向右/向左曲折) ,但不能对角移动).

图片示例1(图片说明更好):

注意:一旦到达另一个填充区域,红色区域将变为蓝色(填充).在下面的示例中,包含区域中没有敌人,因此该区域已填满.

FillExample1:INPROGRESS FillExample1:充满

图片示例2:

在第二个例子中,在包含区域内(和外部区域 - 未显示)中有一个敌​​人,所以只有线条被填满.

在此输入图像描述 在此输入图像描述

总结:这种填充的最佳方法是什么?洪水填充是确定是否填充的最佳选择 - 40x40是一个非常大的计算.如果是,我如何确定从哪个瓷砖开始?

javascript algorithm flood-fill tile

1
推荐指数
1
解决办法
702
查看次数

递归Floodfill分段错误

我正在尝试实施洪水填充.这适用于500x500矩阵:

int ud[]={1,0,-1,0};
int lr[]={0,1,0,-1};

void fl(int x,int y)
{
   if(x<=0||x>n||y<=0||y>m)
   return;
   if(mat[x][y]) // seg fault occurs for this condition
   return;
   mat[x][y]=1;
   for(int i=0;i<4;i++)
   fl(x+ud[i],y+lr[i]);
}
Run Code Online (Sandbox Code Playgroud)

但是在600 X 600矩阵上,它会产生分段错误.什么可能导致这个?

c++ algorithm recursion segmentation-fault flood-fill

0
推荐指数
1
解决办法
206
查看次数