Balde de tinta

2 Respostas   177 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

MendigoDoMato

  • *
  • Posts: 40
  • Ouros: 4
Tópico criado em: 11/10/2016 às 01:29

Fiquei curioso quanto ao balde de tinta do paint, queria saber como ele funciona...bem é só isso mesmo, espero que não seja nada muito complicado.

Um abraço

Speed

  • Veterano
  • *
  • Posts: 744
  • Ouros: 407
  • você consegue!
  • Medalhas Participante da 2º Mostra de Arte Steamfórdia
Resposta 1: 11/10/2016 às 11:27

 Basicamente ele pinta todos os pixels de uma area.
Aqui tem todas as funções explicadinhas: https://pt.wikipedia.org/wiki/Microsoft_Paint

Resque

Resposta 2: 11/10/2016 às 12:03 - Última modificação por Resque em 11/10/2016 às 19:46

Bom, o código fonte é fechado, ou seja, não é possível ver como foi feita a implementação.

Estarei exibindo uma (suposta implementação) que seria uma forma de criar a mesma funcionalidade.

Vamos supor que você criou um quadrado na tela com a própria ferramenta do Paint, algo assim:

Código: [Selecionar]
___________
|           |
|           |
|           |
|___________|

Se você observar bem, quando você passa o mouse em qualquer da parte desenhavel do Paint, verá que será exibido as coordenadas X e Y da tela na parte inferior direita, Ex:

76, 82px

O sistema de Eixo X, Y segue o seguinte modelo:
  O início do X é na parte superior esquerda, começando por 0 e incrementado 1 a cada posição para a direita (horizontal).

  O início do Y é na parte superior esquerda (também), começando por 0 e incrementando 1 a cada posição para baixo (vertical).

Você pode ver esse comportamento colocando o cursor do mouse no extremo superior direito e ir movendo o mouse em linha reta para a direita ou para baixo.


Conhecendo o conceito de eixos, podemos criar a funcionalidade de preenchimento do balde.

Se você desenhar um quadrado igual o meu e colocar o ponteiro do mouse na parte interna no canto extremo superior esquerdo (igual fizemos com a parte desenhável X: 0, Y: 0), você verá que as coordenadas são diferentes, pois o nosso quadrado está praticamente no centro da tela.

No meu caso, a coordenada extrema superior esquerda interna do meu quadrado é X: 133, Y: 43, marquei essa posição com um "X":
Código: [Selecionar]
___________
|X          |
|           |
|           |
|___________|

Ok, temos a posição extrema interna do nosso quadrado, agora vamos descobrir a posição oposta (extrema superior direita), também marquei com um "X" abaixo:
Código: [Selecionar]
___________
|           X|
|            |
|            |
|____________|

No meu caso, a posição extrema superior direita é: X: 303, Y: 43.


Podemos seguir o modelo anterior para descobrir as posições inferiores: extrema esquerda inferior e extrema esquerda inferior

No meu caso seria:
X: 133, Y: 145 (extrema inferior esquerda).


X: 303, Y: 145 (extrema inferior direita).
Código: [Selecionar]
___________
|           |
|           |
|           |
|X_________X|

Sabendo disso podemos afirmar que ao preencher o quadrado com uma cor usando o balde, o Paint saberá essas informações de extremas e irá pintas apenas a parte de dentro.

O balde vai pintar das coordenadas X: 133 até Y: 303 (da extrema esquerda até a extrema direita):
Código: [Selecionar]
___________
|XXXXXXXXXXX|
|           |
|           |
|___________|

Após isso, ele irá verificar se a coordenada pintada final direita é (X: 303, Y: 145)

No caso acima, a coordenada foi (X: 133 até Y: 303)
No caso o eixo X da coordenada Y: 303 foi totalmente preenchido, porém a meta é chegar no eixo Y: 145.

Para chegar no eixo Y: 145, ele terá q pintar incrementar a coordenada Y (descer):
Código: [Selecionar]
___________
|XXXXXXXXXXX|
|XXXXXXXXXXX|
|           |
|___________|

Ok, vamos imaginar que foi pintada a coordenada Y incrementada  (Y + 1): 146

Y: 146 ainda não é igual a Y: 303, então vamos incrementar mais (descer):

(Y + 1): Y 147

Código: [Selecionar]
___________
|XXXXXXXXXXX|
|XXXXXXXXXXX|
|XXXXXXXXXXX|
|___________|

E assim consecutivamente, começando de X e Descendo por Y como se estivesse escrevendo em um caderno:

- Da esquerda para a direita.
- De cima para baixo.