Delphi | Pgina
sobre a Linguagem |
Efeitos de imagem no DelphiUtilizando o Firemonkey para aplicar efeitos de imagem 22-03-2015
Vamos usar o framework Firemonkey do Delphi para \"brincarmos\" um pouco com a aplicao de alguns efeitos em figuras. Aqui, vou utilizar o XE2, mas voc pode obter os mesmos resultados utilizando verses posteriores. Crie uma nova aplicao, escolhendo o menu File > New > FireMonkey HD Application . Isso criar um formulrio para que possamos iniciar um novo projeto para a plataforma Windows. { ImageControl1.RotationAngle := TrackBar1.Value ; Label1.Text :=
FormatFloat('#,##0.00',TrackBar1.Value ) + ''; } Agora, coloque um componente BlurEffect sobre o componente ImageControl. Aparentemente, nada acontece e nenhum objeto novo visto no form. Este um componente no visual. Componentes no visuais no Delphi geralmente so vistos em tempo de design, mas no em tempo de execuo. Essa regra, no entanto, no se aplica ao FireMonkey, onde componentes no visuais, de fato, ficam totalmente invisveis. Mas voc pode perceber que ele est subordinado ao ImageControl, se observar a janela Structure View (Figura 1).
O efeito
desejado borrar a imagem. Selecione o componente atravs da janela
Sturcture e modifique a propriedade Softness
para 0. Selecione tambm False para
a propriedade Enabled. Na TrackBar, deixe Max com 9. Para borrar a imagem, em cdigo, habilitaremos a
propriedade Enabled para True e iremos incrementar o valor de Softness. Ento, no evento OnChange da
TrackBar, coloque isso: BlurEffect1.Softness := TrackBar1.Value ; Label1.Text :=
FloatToStr(BlurEffect1.Softness); Tambm no evento OnCreate do Form precisamos habilitar o recurso: BlurEffect1.Enabled := True; Pressione F9 e arraste a TrackBar para ver o efeito (Figura 2). Ressalto ento que os objetos descendentes de TEffect so todos no-visuais. Voc pode aplicar estes efeitos a qualquer componente visual do FireMonkey. Para usar um componente descendente de TEffect em tempo de design, tenha certeza de que ele ser um filho (child) do componente desejado, isto , estar subordinado ao componente cujo efeito se quer aplicar. Por exemplo, para aplicar um efeito num Edit, tenha certeza de que o efeito ser um componete-filho deste Edit. Para que isso acontea, o componente da paleta Effects deve ser arrastado e solto sobre o objeto desejado. Caso voc erre o alvo, no h problema: usando o Structure View, mova-o para baixo do objeto-alvo. Isso tornar o descendente da classe TEffect hierarquicamente subordinado a ele. Para remover um efeito, clique nele tambm usando a Structure View e pressione Delete no teclado. Faamos, agora, um novo projeto para testar o efeito BloodTransitionEffect. Para isso, em um novo projeto FireMonkey HD, adicione um ImageControl, um OpenDialog (paleta Dialogs), dois Buttons e, novamente, uma TrackBar. Ajuste o ImageControl para que ocupe boa parte do form e coloque o boto e a TrackBar na parte inferior da janela. Mude o texto do primeiro boto para Abrir fig 1 e o do segundo para Abrir fig 2. Da paleta Effects, coloque um BloodTransitionEffect sobre o componente ImageControl. Ajuste sua propriedade Enabled para False e Progress para 0.
No evento OnClick do primeiro boto, coloque o seguinte: if OpenDialog1.Execute
then
ImageControl1.Bitmap.LoadFromFile(OpenDialog1.FileName ); No segundo boto, coloque o seguinte no evento OnClick: if OpenDialog1.Execute
then
BloodTransitionEffect1.Target.LoadFromFile(OpenDialog1.FileName );
Isso permitir que voc escolha duas figuras: uma sangrar at se transformar na outra, durante a transio do efeito. Target uma propriedade do objeto TBlodTransitionEffect, que nada mais do que um objeto da classe TBitmap (por isso, ele tambm tem o mtodo LoadFromFile( )). Voc pode at no escolher uma segunda figura, mas neste caso, o efeito da transio ser da figura 1 para ela mesma (embora seja possvel perceber a mudana mesmo assim). No evento OnChange da TrackBar, digite: BloodTransitionEffect1.Progress := TrackBar1.Value ; Finalmente, no evento OnCreate do form, digite: BloodTransitionEffect1.Progress := 0; [1] Ao executar, escolha duas figuras e, depois, arraste a TrackBar. O efeito obtido deve ser semelhante ao mostrado na Figura 3. As figuras usadas foram duas das que podemos encontrar na pasta Amostra de Imagens, do Windows: Crisntemo.jpg e Deserto.jpg, mas voc poder usar qualquer figura que desejar. Outro efeito interessante para aproveitar os recursos da GPU o de onda.
Num projeto separado, insira o controle ImageControl e, atravs da propriedade Bitmap, carregue uma figura qualquer (aqui, usei uma figura originalmente obtida em http://pensenao.wordpress.com/tag/amizade-animal/). Coloque tambm um Button e mude a propriedade Text para >. Depois, adicione imagem um componente WaveEffect. A propriedade WaveSize configura o tamanho da onda e Time controla as oscilaes atravs do tempo. Deixe Time com o valor 1 e, atravs de um Timer, vamos seguir modificando seu valor. Podemos conseguir isso facilmente, usando um componente Timer. Em seu evento OnChange, coloque o cdigo a seguir: with
WaveEffect1 do Begin Enabled := True ; Time := Time + 1; End; Aqui, estamos habilitando o efeito desejado, tornando sua propriedade Enabled para True. Ao mesmo tempo, Time vai sendo incrementado em uma unidade cada vez que o cdigo executado. O evento OnChange do Timer ocorrer a cada intervalo de tempo definido em sua propriedade Interval. Configure-a para 100 (o que significa 100 milissegundos), para que o efeito de onda no fique muito devagar, mas tambm no excessivamente rpido (voc pode alter-lo para outro valor, se quiser). No evento OnClick to boto, coloque o cdigo que ativar o timer e mudar o texto do boro para X: if
NOT Timer1.Enabled then begin Button1.Text
:= X; Timer1.Enabled
:= True; end Else begin
Button1.Text := >
Timer1.Enabled := False;
WaveEffect1.Time := 0; End; Se o Timer j estiver ativado, ento ele ser desativado, fazendo a propriedade Time do WaveEffect voltar a zero. Se voc quiser testar o projeto tambm alterando o tamanho da onde, pode colocar uma TrackBar e configurar seus valores Min e Max para 32 e 256, respectivamente (este o intervalo permitido para o tamanho da onda). No evento OnChange da TrackBar, atribua seu valor WaveSize: WaveEffect1.WaveSize := TrackBar1.Value ;
Agora, uma questo esttica: voc pode desejar maximizar o aplicativo e, ao fazer isso, perceber que as dimenses da figura no iro acompanhar o layout do form. Para que os componentes se ajustem na tela adequadamente, devemos ter certeza de que o boto e a TrackBar continuaro prximos ao rodap e que a figura no ir sobrep-los. Para ajustar o boto e a TrackBar, configure a propriedade Anchor de ambos de modo que akBottom e akLeft fiquem como True, desmarcando akTop. Isso faz o alinhamento padro destes componentes ter como referencia as distncias da esquerda para a direita e de baixo para cima. No ImageControl, como ele deve estender-se pela maior parte do form, deixe todos os valores de Anchors como True. Alm disso, volte propriedade Bitmap, clique em ... e, depois, no boto Fit. Isso far com que a figura dentro do componente se ajuste ao tamanho do ImageControl do contrrio, o componente acompanharia o tamanho do form, mas no seu contedo. Fonte: ASMC |
- Todos os artigos - |