Fórum Identificação e leitura de imagens #198767
03/12/2003
0
1- Tenho um quadrado amarelo de arestas pretas e ao redor dele tudo é cinza, quando o ponteiro do mouse está sobre o amarelo, um label ou edit deve apresentar o nome da cor ou seu valor hexa. Ao colocar o mouse sobre a parte cinza, deve aparecer o nome cinza ou hexa, e quando o ponteiro estiver sobre a aresta, deve aparecer preto ou seu valor hexa.
2- Tenho dois quadrados amarelos sem bordas e todo o restante da tela é cinza, ao clicar um botão, o programa automaticamente indentificaria o limite entre o amarelo eo cinza e contornaria o quadrado automaticamente com uma borda preta. Estando os dois quadrados contornados, ele me informaria a distância em pixel, mm, etc... que separa um quadrado do outro.
Se alguém já fez um trabalho assim ou possui informações sobre isso, eu ficaria muito grato.
Obrigado.
Ricardo-op
Curtir tópico
+ 0Posts
03/12/2003
Marcelo Saviski
para a 1º dúvida faça o seguinte:
no eventoOnMouseMove do form faça:
Label1.Caption :=´#´ + IntToHex(Canvas.Pixels[X, Y], 6);
a 2º é mais complicada:
tente assim (é um modo lento, mas serve de exemplo)
var i, j: Integer Cor1, Cor2: TColor; R, G, B: Boolean; Dif: Boolean; begin for j := 0 to ClientWidht - 1 do begin for i := 0 to ClientHeight - 1 do begin Cor1 := Canvas.Pixels[i, j]; Cor2 := Canvas.Pixels[i +1, j + 1]; Dif := Cor 1 <> Cor2; if Dif then Canvas.Pixels[i, j] := clBlack; end; end;
A da distância ficou sem solução (ainda)
OBS: não testei nenhuma das funções
Gostei + 0
03/12/2003
Marconi
Para contornar basta utilizar as funções
Canvas.LineTo(x,y)
e Canvas.movTo(x,y)
os x e y seriam dados pelas propriedades top, height, left e width de cada um dos quadrados.
Para calcular a distância em pixeis bastaria verificar qual está mais à direita ou mais abaixo, comparando as propriedades top e left.
A distancia entre eles dependeria da posição que os achasse. Se estiverem em diagonal teria que aplicar pitagoras para encontrar a hipotenusa, que seria então a distância.
É meio complicado para montar mas a idéia é esta.
Marconi
Gostei + 0
04/12/2003
Ricardo-op
Obrigado mais uma vez.
Gostei + 0
04/12/2003
Marcelo Saviski
Gostei + 0
04/12/2003
Ricardo-op
Gostei + 0
04/12/2003
Jaguarnet7
Mas,oq vc prentende, recortar a imagem do osso???
Gostei + 0
04/12/2003
Marcelo Saviski
digamos que vc tenha a imagem, fundo preto com um quadrado verde no centro
seria algo + ou - assim:
(cada # é um pixel da imagem)
[color=green:57c8442a3e][/color:57c8442a3e]
[color=green:57c8442a3e][/color:57c8442a3e]
[color=green:57c8442a3e][/color:57c8442a3e]
e quer se gerar algo assim:
[color=red:57c8442a3e][/color:57c8442a3e]
[color=red:57c8442a3e][/color:57c8442a3e][color=green:57c8442a3e][/color:57c8442a3e][color=red:57c8442a3e][/color:57c8442a3e]
[color=red:57c8442a3e][/color:57c8442a3e][color=green:57c8442a3e][/color:57c8442a3e][color=red:57c8442a3e][/color:57c8442a3e]
[color=red:57c8442a3e][/color:57c8442a3e][color=green:57c8442a3e][/color:57c8442a3e][color=red:57c8442a3e][/color:57c8442a3e]
[color=red:57c8442a3e][/color:57c8442a3e]
o que se precisa fazer é passar pixel por pixel, e verificar se o do lado é diferente, se for, deixar ele vermelho
assim:
for Y := 0 to Height - 1 do for X := 0 to Width - 1 do if Pixels[X, Y] <> Pixels[X + 1, Y + 1] then Pixels[X, Y] := clRed;
a propriedade Pixels pertence ao Canvas, para usar o Canvas você precisa de uma Imagem Bitmap
faça esse teste bem simples:
coloque um Image e um botão, carregue um Bitmep qualquer que tenha ai, de preferencia com cores bem contrastantes e com uma cor de fundo uniforme, e coloque esse código no Botão:
for Y := 0 to Height - 1 do for X := 0 to Width - 1 do if Image.Picture.Bitmap.Canvas.Pixels[X, Y] <> Image.Picture.Bitmap.Canvas.Pixels[X + 1, Y + 1] then Image.Picture.Bitmap.Canvas.Pixels[X, Y] := clRed;
faça o teste e me diga se funcionou, é só um exemplo básico (e lento) que deve contornar a imagem
mas lembre-se de carregar uma imagem com poucas cores e fundo uniforme, de preferencia formas geométricas (é só um teste por enquanto)
qualquer dúvida pode falar, tenho bastante coisa sobre manipulação de imagens que poderão lhe servir
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)