Desenhando com cores Alpha no .NET framework!

Publicado: 03/04/2005 em IntoSpaces

Olá Pessoal!!!
Prontos pro final de semana? Hoje acordei bem cedo pra poder mandar ver no projeto do ImagineCup, estamos correndo muito por aqui pra conseguir fazer a coisa andar.
O que está mandando muito e consumindo maior parte do tempo são as pesquisas, fundamentais para se obter as melhores práticas em nosso caminho. E em meio a uma pesquisa dessas encontrei algo interessante que procurava há muito tempo, porém não enxergava o que era óbvio.
Como utilizar cores com o efeito Alpha no .NET, aquele efeito de transparência.
Então pausa nas pesquisas para desenvolver um pequeno exemplo de como se pode obter esas feature que é muito interessante de ser usada para diversas finalidades.

O segredo está no método FromArgb da Estrutura System.Drawing.Color.
Este é um método static que retorna cores baseadas no padrão utilizado pela Web, RGB(Red Green Blue).

Bom sempre eu me perguntava, por que este método se chama FromArgb se eu não consigo utilizar o A dele, que seria o correspondente ao Alpha.
A assinatura mais comumente utilizada desse método é System.Drawing.Color.FromArgb(255,255,255), nele são passados os valores de vermelho(red), verde(green) e azul(blue) e retorna uma intância da classe Color formada nesse padrão.

Para resolver o nosso problema utilizaremos outra assinatura desse método que será System.Drawing.Color.FromArgb(255,System.Drawing.Color). Esse valor inteiro é o valor atribuído para setar a transparência da cor, que notem já é passada como parâmetro para a classe e não é gerada a partir dela como na outra assinatura.

Vejamos um exemplo prático de como se desenhar um retângulo e um texto sobre uma imagem utilizando-se da transparência

private Image Draw(Graphics g, Bitmap bmp, int x, int y, int width, int height, int alpha, Color color)
  {
   g.FillRectangle(new SolidBrush(Color.FromArgb(alpha,color)),x,y,width,height);
   
   g.DrawString(textBox1.Text,new Font("arial",30,FontStyle.Bold),new SolidBrush(Color.FromArgb(alpha,Color.White)),new PointF(x,y));
   
   return bmp;
  }

Nada no modo de se desenhar um retângulo e uma string foi alterado, somente utlizamos o alpha para alterar a opacidade da cor.
Para ilustrar bem essa utilização e como pode ser interessante desenvolvi uma simples aplicação winforms, ela implementa este exemplo de forma prática, ela cria uma Marca d’agua em uma imagem de maneira interativa.

Vejam como ficou a implementação

100% de opocidade
Imagem com gráficos desenhados totalmente opacos

50% da opacidade
Gráficos desenhados com a metada de opacidade possível

25% de opacidade
Gráficos semi visíveis com 25% de opacidade

Download do projeto
http://www.shindesign.net/thespoke/pt-br/02-04-2005/alphakaji.zip

Download do executável
http://www.shindesign.net/thespoke/pt-br/02-04-2005/alphakajiEXE.zip

É isso aí, a solução do problema é bastante simples, tentei detalhar um pouco mais sobre o que realmente acontece, mas mesmo assim ainda está muito longe de se fazer algo parecido em Java.
Um exemplo que encontrei no PortalJava http://www.portaljava.com.br/home/modules.php?name=Encyclopedia&op=content&tid=27

 public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;
   
        // Draw background…
   
        // Set alpha.  0.0f is 100% transparent and 1.0f is 100% opaque.
        float alpha = .3f;
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
   
        // Draw foreground…
    }

Algumas classes da linguagem são até parecidas, como a Graphics, porém o resto está muito longe. Não sei esta é a melhor forma de se fazer em Java, mas foi o que encontrei.

É isso aí pessoal!!!
Espero ter ajudado! Agora é hora de retornar à pesquisa para o ImagineCup!!

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s