문제

im 에서 작업하고 간단한 그래픽 라이브러리에서는 C turbo C++문 개발하고 매우 기본 버전은 페인트 스타일을 프로그램으로,모든 것이 잘 작동 하지만 얻을수 있는 알고리즘을 작동합니다.Im 를 사용하여 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 empty
        return 0;
    struct node *temporal;
    temporal = *top;
    x = (*top)->x;
    y = (*top)->y;
    *top = (*top)->next;
    free(temporal);
    return 1; //If we pop an element 
}

이 코드가 있을 만들에게 홍수 기능:

void floodFill(int x, int y, int color_to_replace, int color_to_fill)
{
    if(color_to_replace == color_to_fill)
  return;
 struct node *stack = NULL;
 if(push(&stack, x, y) == 0) //If we can´t push the pixel
            return;
    while(pop(&stack, x, y) == 1) //While are pixels in the stack
    {
        pixel(x, y, color_to_fill);
        if(x+1 < 640 && read_pixel(x+1, y) == color_to_replace)
            if(push(&stack, x+1, y) == 0)
                return;
        if(x-1 >= 0 && read_pixel(x-1, y) == color_to_replace)
            if(push(&stack, x-1, y) == 0)
                return;
        if(y+1 < 480 && read_pixel(x, y+1) == color_to_replace)
            if(push(&stack, x, y+1) == 0)
                return;
        if(y-1 >= 0 && read_pixel(x, y-1) == color_to_replace)
            if(push(&stack, x, y-1) == 0)
                return;
    }
}

하지만 그것은 여전히 작업할 때,im triying 을 채우 큰 영역을 그냥 정지 및 주셔서 대단히 감사드 작업을 함께 해상도 640X480 내 프로그램으로 이 문제를;어떤 아이디어를 왜요?

도움이 되었습니까?

해결책

대신 추진에 있는 모든 픽셀 스택을 채우기 위해 시도는 가능한 한 많은 픽셀 수평으로 추진하기 전에 새로운 위치를 선택 합니다.보 위키 문서 에 대한 논의한다.

다른 팁

보이지 않는데 boundschecking 하는 어느 곳에서든지...

당신은 확실한 X 와 Y 값이지의 그림?

편집:

여분의 아이디어를 왜 그것은 작동하지 않을 수 있습:

  • 의 읽고 쓰는 픽셀 기능 버그
  • 색상 값을 다시 얻을 확대를 32 비트(기 때문에 인스턴스에 대한 당신의 사진은 16 비트)그리고 색깔 있고 읽고 쓰기에 다시 다시 정확하게 일치하지 않습니다.(예:당신이 쓰 색상:0xff00ff 하지만 당신은 다시 얻을:0xf800f8 기 때문에 색상을 가지고 확장에서 16 비트)그리고 그 결과 홍수에서 채우려고 영원히 계속됩니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top