 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Sáb Jun 17, 2017 6:49 pm Assunto: Simular pintura de quadro em Delphi |
|
|
Boa noite a todos.
Preciso fazer um form onde vou simular a pintura de um quadro. Pensei em colocar 2 componentes Timage sobrepostos, onde o de baixo terá a imagem final e o de cima uma imagem totalmente branca.
O mouse deverá percorrer todo o form revelando, por onde passar, a imagem do primeiro Timage. O efeito deve ser parecido a alguém pintando um quadro.
Alguém tem alguma dica de como fazer isso em Delphi 7 ?
Obrigado a todos. |
|
| Voltar ao Topo |
|
 |
carbox Colaborador

Registrado: Quarta-Feira, 3 de Março de 2010 Mensagens: 1471
|
Enviada: Seg Jun 19, 2017 8:41 am Assunto: Re: Simular pintura de quadro em Delphi |
|
|
Você quer criar tipo p "Paint"?
| cidnazareth escreveu: | Boa noite a todos.
Preciso fazer um form onde vou simular a pintura de um quadro. Pensei em colocar 2 componentes Timage sobrepostos, onde o de baixo terá a imagem final e o de cima uma imagem totalmente branca.
O mouse deverá percorrer todo o form revelando, por onde passar, a imagem do primeiro Timage. O efeito deve ser parecido a alguém pintando um quadro.
Alguém tem alguma dica de como fazer isso em Delphi 7 ?
Obrigado a todos. |
|
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Jun 19, 2017 9:01 am Assunto: |
|
|
Acredito que seja mais tipo uma raspadinha, ondem no primeiro Timagem tem uma imagem e a segunda que estar sobreposta outra e quando passado o mouse por cima da que estar sobreposta vai revelando a que estar por baixo.
Pelo menos é o que entendi, e sim é possível fazer como pensa em fazer, com uso de dois Timage, contudo eu faria com apenas um timage mesmo.
Em um tropico falei sobre efeito em imagens o qual em alguma parte mostrei como trabalhar com mascara, vai precisa saber trabalhar com mascara se quiser fazer isso funcionar, mesmo usando um ou dois Timages
Dá uma lida nos posts do link:
http://www.activedelphi.com.br/forum/viewtopic.php?t=59328 _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Jun 19, 2017 11:37 am Assunto: |
|
|
Pode conferir um pequeno exemplo que elaborei: Download do exemplo aqui _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Seg Jun 19, 2017 1:41 pm Assunto: |
|
|
| strak2012 escreveu: | Acredito que seja mais tipo uma raspadinha, ondem no primeiro Timagem tem uma imagem e a segunda que estar sobreposta outra e quando passado o mouse por cima da que estar sobreposta vai revelando a que estar por baixo.
Pelo menos é o que entendi, e sim é possível fazer como pensa em fazer, com uso de dois Timage, contudo eu faria com apenas um timage mesmo.
Em um tropico falei sobre efeito em imagens o qual em alguma parte mostrei como trabalhar com mascara, vai precisa saber trabalhar com mascara se quiser fazer isso funcionar, mesmo usando um ou dois Timages
Dá uma lida nos posts do link:
http://www.activedelphi.com.br/forum/viewtopic.php?t=59328 |
É isso mesmo que preciso Strak2012, fazer como se fosse uma raspadinha. O link que você me enviou não está funcionando.
Se for melhor pra vc pode enviar para meu e-mail por favor:
cidnazareth@gmail.com
Muito obrigado. |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Seg Jun 19, 2017 1:52 pm Assunto: Re: Simular pintura de quadro em Delphi |
|
|
| carbox escreveu: | Você quer criar tipo p "Paint"?
| cidnazareth escreveu: | Boa noite a todos.
Preciso fazer um form onde vou simular a pintura de um quadro. Pensei em colocar 2 componentes Timage sobrepostos, onde o de baixo terá a imagem final e o de cima uma imagem totalmente branca.
O mouse deverá percorrer todo o form revelando, por onde passar, a imagem do primeiro Timage. O efeito deve ser parecido a alguém pintando um quadro.
Alguém tem alguma dica de como fazer isso em Delphi 7 ?
Obrigado a todos. |
|
Olá Carbox, obrigado pelo retorno.
É exatamente o que o strak2012 disse, precisa funcionar como uma raspadinha, develando a imagem de baixo. |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Jun 19, 2017 2:25 pm Assunto: |
|
|
segue o link corrigido:Download do exemplo aqui
este exemplo tem suporte as imagens do tipos: bmp, png, gif, jpg e jpeg onde
bmp -> nativo do delphi não requer unit extra
png -> requer a unit PNGImage.pas
gif -> requer a unit GIFImg.pas
jpg e jpeg -> requer a unit jpeg.pas _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Seg Jun 19, 2017 4:53 pm Assunto: |
|
|
| strak2012 escreveu: | segue o link corrigido:Download do exemplo aqui
este exemplo tem suporte as imagens do tipos: bmp, png, gif, jpg e jpeg onde
bmp -> nativo do delphi não requer unit extra
png -> requer a unit PNGImage.pas
gif -> requer a unit GIFImg.pas
jpg e jpeg -> requer a unit jpeg.pas |
Muito obrigado Strak2012, funcionou perfeitamente, era isso mesmo que estava precisando.
Agradeço a todos pela ajuda!!! |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Ter Jun 20, 2017 2:22 pm Assunto: |
|
|
| strak2012 escreveu: | segue o link corrigido:Download do exemplo aqui
este exemplo tem suporte as imagens do tipos: bmp, png, gif, jpg e jpeg onde
bmp -> nativo do delphi não requer unit extra
png -> requer a unit PNGImage.pas
gif -> requer a unit GIFImg.pas
jpg e jpeg -> requer a unit jpeg.pas |
Boa tarde Strak2012.
Será que você consegue me ajudar com mais uma coisa nesta "Raspadinha" ?
Preciso simular com o mouse a "raspagem" em pontos aleatórios da imagem até que tudo fique 100% transparente. Para melhorar o efeito e agilizar o processo, aumentei mask.Canvas.Pen.Width para 50.
Consegue me dar alguma luz ?
Muito obrigado!!! |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Ter Jun 20, 2017 3:10 pm Assunto: |
|
|
Como deve ter percebido a mascara é construída através das funções MoveTo e LineTo onde MoveTo é disparado quando se pressionado o mouse em cima do Timage, e o LineTo é disparado quando o mouse estar em movimento em cima do Timage.
Também percebeste onde aumentar o tamanho do Espessura do lapis através do comando "mask.Canvas.Pen.Width:=tamanho;"
para se criar pontos por volta da linha que é desenhada com o movimento do mouse vai precisar usar alguns comandos em um estrutura de FOR de forma a criar pontos aleatórios
Teste estas alterações cá e veja se é isso:
| Código: | procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
ax, ay, rx, ry, tp, a: Integer;
dis: real;
begin
if down then
begin
mask.Canvas.Pen.Color := 0;
mask.Canvas.Pen.Width := 50;
mask.Canvas.LineTo(X, Y);
makeRest(img1, img2, mask, Rest);
Image1.Picture.Bitmap.Assign(Rest);
{ desenho dos pontos }
ax := X; ay := Y; // guardando posição original da linha
tp := mask.Canvas.Pen.Width; // pegando o tamanho do lapis
dis := 1.3; // distancia do ponto em relação a linha
for a := 1 to 5 do // 5 pontos aleatorio serão desenhado ao redor da linha
begin
// tamanho aleatorio para os pontos
mask.Canvas.Pen.Width := 3 + random(10);
// cordenada do novo ponto fora da linha
rx := round(-(tp * dis) + random(tp * 2) * dis);
ry := round(-(tp * dis) + random(tp * 2) * dis);
// desenhando o novo ponto
mask.Canvas.MoveTo(ax + rx, ay + ry);
mask.Canvas.LineTo(ax + rx, ay + ry);
end;
// devolvendo a cordenada original da linha
mask.Canvas.MoveTo(ax, ay);
end;
end;
|
_________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Ter Jun 20, 2017 4:09 pm Assunto: |
|
|
| strak2012 escreveu: | Como deve ter percebido a mascara é construída através das funções MoveTo e LineTo onde MoveTo é disparado quando se pressionado o mouse em cima do Timage, e o LineTo é disparado quando o mouse estar em movimento em cima do Timage.
Também percebeste onde aumentar o tamanho do Espessura do lapis através do comando "mask.Canvas.Pen.Width:=tamanho;"
para se criar pontos por volta da linha que é desenhada com o movimento do mouse vai precisar usar alguns comandos em um estrutura de FOR de forma a criar pontos aleatórios
Teste estas alterações cá e veja se é isso:
| Código: | procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
ax, ay, rx, ry, tp, a: Integer;
dis: real;
begin
if down then
begin
mask.Canvas.Pen.Color := 0;
mask.Canvas.Pen.Width := 50;
mask.Canvas.LineTo(X, Y);
makeRest(img1, img2, mask, Rest);
Image1.Picture.Bitmap.Assign(Rest);
{ desenho dos pontos }
ax := X; ay := Y; // guardando posição original da linha
tp := mask.Canvas.Pen.Width; // pegando o tamanho do lapis
dis := 1.3; // distancia do ponto em relação a linha
for a := 1 to 5 do // 5 pontos aleatorio serão desenhado ao redor da linha
begin
// tamanho aleatorio para os pontos
mask.Canvas.Pen.Width := 3 + random(10);
// cordenada do novo ponto fora da linha
rx := round(-(tp * dis) + random(tp * 2) * dis);
ry := round(-(tp * dis) + random(tp * 2) * dis);
// desenhando o novo ponto
mask.Canvas.MoveTo(ax + rx, ay + ry);
mask.Canvas.LineTo(ax + rx, ay + ry);
end;
// devolvendo a cordenada original da linha
mask.Canvas.MoveTo(ax, ay);
end;
end;
|
|
Olá Strak2012.
O efeito dos pontos ficou muito show e você manda muito bem mesmo!!!! Mas eu acho que não me expressei muito bem quando falei em pontos, me desculpe!
O efeito que gostaria de ter é a raspagem aleatória da imagem, até que 100% da imagem de baixo esteja visível. Esta raspagem deve acontecer sem a interferência do usuário.
Tenho uma imagem de uma mão que vou usar para colocar no lugar do cursor para dar a impressão de que a mão está raspando o local (na verdade seria uma mão com um pincel).
Isso é possível ?
[/img] |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Ter Jun 20, 2017 4:18 pm Assunto: |
|
|
Estamos falando então de uma animação, onde uma imagem de uma mão percorrera toda a imagem e por onde ela for passando vá revendo o conteúdo da imagem de baixo até esta imagem esteja toda revelado, correto?
Se sim:
Vais precisar trabalhar com um timer ou thread, com um array de coordenadas para que seja traçado o movimento da mão e claro da imagem da mão em questão nada mais.
Pelo array de coordenada você faz o movimento que a mão deve percorrer, marcando os pontos vértices.
Com mais tempo tento ver se implemento tal aminação, provavelmente hj depois da faculdade ou amanhã cedo no trabalho em algum momento livre. _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Ter Jun 20, 2017 4:36 pm Assunto: |
|
|
| strak2012 escreveu: | Estamos falando então de uma animação, onde uma imagem de uma mão percorrera toda a imagem e por onde ela for passando vá revendo o conteúdo da imagem de baixo até esta imagem esteja toda revelado, correto?
Se sim:
Vais precisar trabalhar com um timer ou thread, com um array de coordenadas para que seja traçado o movimento da mão e claro da imagem da mão em questão nada mais.
Pelo array de coordenada você faz o movimento que a mão deve percorrer, marcando os pontos vértices.
Com mais tempo tento ver se implemento tal aminação, provavelmente hj depois da faculdade ou amanhã cedo no trabalho em algum momento livre. |
Exatamente isso, como uma animação !!!!!!
Puxa vida, nem sei como te agradecer pela força que está me dando. Estou há 15 anos sem mexer com Delphi e trabalhar com imagens nunca foi meu forte. Vou estudar bastante esses seus exemplos. Você é muito fera, parabéns.
Fiz um cursor de uma mão com um pincel mas ficou muito pequeno. É possível aumentar o tamanho do cursor via programação ? |
|
| Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Ter Jun 20, 2017 4:52 pm Assunto: |
|
|
Não precisa usar o cursor do windows, podes usar uma imagem que Servira apenas para animação podendo ate ter um tamanho consideravelmente grande ou médio. _________________ Tudo podemos quando tudo sabemos! |
|
| Voltar ao Topo |
|
 |
cidnazareth Novato

Registrado: Sábado, 17 de Junho de 2017 Mensagens: 12
|
Enviada: Ter Jun 20, 2017 5:26 pm Assunto: |
|
|
| strak2012 escreveu: | | Não precisa usar o cursor do windows, podes usar uma imagem que Servira apenas para animação podendo ate ter um tamanho consideravelmente grande ou médio. |
Aí tá bom até demais !!! Vou dar uma pesquisada para ver como faço isso.
Vlw! |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|