ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Simular pintura de quadro em Delphi
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Sáb Jun 17, 2017 6:49 pm    Assunto: Simular pintura de quadro em Delphi Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
carbox
Colaborador
Colaborador


Registrado: Quarta-Feira, 3 de Março de 2010
Mensagens: 1471

MensagemEnviada: Seg Jun 19, 2017 8:41 am    Assunto: Re: Simular pintura de quadro em Delphi Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Jun 19, 2017 9:01 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Jun 19, 2017 11:37 am    Assunto: Responder com Citação

Pode conferir um pequeno exemplo que elaborei: Download do exemplo aqui
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Seg Jun 19, 2017 1:41 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Seg Jun 19, 2017 1:52 pm    Assunto: Re: Simular pintura de quadro em Delphi Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Jun 19, 2017 2:25 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Seg Jun 19, 2017 4:53 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Ter Jun 20, 2017 2:22 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Ter Jun 20, 2017 3:10 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Ter Jun 20, 2017 4:09 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Ter Jun 20, 2017 4:18 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Ter Jun 20, 2017 4:36 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Ter Jun 20, 2017 4:52 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
cidnazareth
Novato
Novato


Registrado: Sábado, 17 de Junho de 2017
Mensagens: 12

MensagemEnviada: Ter Jun 20, 2017 5:26 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB