MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!

Participe do fórum, é rápido e fácil

MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!
MMORPG Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Java Basico] Criando Imagens Em Java

3 participantes

Ir para baixo

[Java Basico] Criando Imagens Em Java Empty [Java Basico] Criando Imagens Em Java

Mensagem por warlock200 Seg 17 Dez 2012, 21:14

Bem eu observei que muitos membros do forum agora estao interessados em programar java bem eu nao sou programador em nenhuma linguagem vamos dizer que sei o basico de cada uma ^^ mais hoje eu vou mostrar pra voces um metodo de criar imagens dentro do java usando a swing que ja vem com os buffer de imagem que no caso e o "java.awt.Graphics" A classe "java.awt.image.BufferedImage" é uma subclasse de "java.awt.Image" que se utiliza um bloco de memoria que e onde criaremos a imgem ^^ No construtor da classe passaremos 3 parâmetros que são :
width (largura da imagem)
height (altura da imagem)
tipo da imagem
Bem vamos começar usando a "BufferedImage.TYPE_INT_RGB" que nao funciona com imagens transparentes! mais isto esta fora de questao.. bem para criar o grafico usaremos o seguinte codigo :
Código:
int width=200, height=200;
BufferedImage buffer = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
Graphics g = buffer.createGraphics();
bem ajente ja tem o buffer que no caso esta com a resoluçao de 200x200 que e facilmente editada!
a partir dai temos um objeto grafico (Graphics) que vamos utilizar para desenhar as primitivas que desejarmos. As primitivas são: pontos, retas, ovais (e círculos), retângulos (e quadrados), dentre outros. Criada a imagem, vamos criar um fundo para ela:

Código:
g.setColor( Color.WHITE );
g.fillRect( 0, 0, width, height );

definimos a cor que queremos e ordenamos criar uma linha com o metodo "drawLine()" dps e so informar o ponto inicial e final da linha ja que agente ja ta aqui entao vamos ver alguns resultados usando o resto da aplicacao assim ja podemos ter ideia do visual! Vamos criar uma simples aplicação Swing para exibir a imagem que criamos na tela. Aqui segue o código para o exemplo:
Código:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class ExemploImagem {
   public static void main(String[] args) {
      JFrame frm = new JFrame("Teste Imagem");
      JPanel pan = new JPanel();
      JLabel lbl = new JLabel( criarImagem() );
      pan.add( lbl );
      frm.getContentPane().add( pan );
      frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frm.pack();
      frm.show();
   }
   
   private static ImageIcon criarImagem() {
      int width=200, height=200;
      BufferedImage buffer = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
      Graphics g = buffer.createGraphics();
      g.setColor( Color.WHITE );
      g.fillRect( 0, 0, width, height );
      g.setColor( Color.BLACK );
      g.drawLine( 0, 0, width, height );
      return new ImageIcon( buffer );
   }
}

No método main() apenas criamos os componentes Swing para fazer a exibição da imagem, mas atente para o método criarImagem() que é o que realmente nos interessa, pois é lá que estamos criando a imagem em buffer e então retornamos um objeto do tipo ImageIcon, que é o componente visual do Swing que representa uma imagem. Executando a aplicação, veremos uma janela como esta:
[Java Basico] Criando Imagens Em Java Img1z
este e o primeiro exemplo e bem simples e aparentimente nao tem utilidade foi importante para que pudéssemos iniciar nossa experiência com a manipulação de imagens com Java. Agora, vamos elaborar nosso exemplo um pouco mais, gerando um gráfico em pizza. Para isso, vamos cria uma classe, chamada PieChart, que vai ser um componente que vai gerar para gente um gráfico em pizza, a partir de um array de valor do tipo int. Veja a implementação:
Código:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class PieChart {
   
   //guarda os valores a serem exibidos no gráfico
   private int[] values;
   //guarda o buffer da imagem desenhada
   private BufferedImage imageBuffer;
   //guarda a cor de fundo
   private Color background;
   //guardam as dimensões da imagem
   private int width, height;
   //cores para os pedaços do gráfico
   private Color[] colors = { Color.BLUE, Color.GREEN, Color.RED,
                        Color.YELLOW, Color.ORANGE, Color.PINK,
                        Color.MAGENTA, Color.LIGHT_GRAY, Color.GRAY,
                        Color.BLACK };
   
   /**
    * Cria um objeto da classe que gera um gráfico em pizza.
    * @param values Array de valores inteiros a serem representados.
    * @param width Largura da imagem.
    * @param height Altura da imagem.
    * @param background Cor de fundo da imagem.
    */
   public PieChart( int[] values, int width, int height, Color background ) {
      if( values==null || values.length<1 ||
         width<0 || height<0 ||
         background==null ) throw new IllegalArgumentException();
      this.values = values;
      this.width = width;
      this.height = height;
      this.background = background;
      createChart();
   }
   
   /**
    * Cria a imagem internamente.
    */
   private void createChart() {
      imageBuffer = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
      Graphics g = imageBuffer.createGraphics();
      g.setColor( background );
      g.fillRect( 0, 0, width, height );
      int arc = 0;
      int[] sizes = calculateAngles( values );
      for(int i=0, j=0; i<sizes.length; i++, j++) {
         if( j==10 ) j = 0;
          g.setColor( colors[j] );
          g.fillArc( 0, 0, width, height, arc, sizes[i] );
          arc += sizes[i];
      }
   }
   
   /**
    * Calcula os ângulos para cada valor informado.
    * @param values Valores a terem seus ângulos calculados.
    * @return Array de int com os ângulos para cada valor.
    */
   private int[] calculateAngles( int[] values ) {
      int[] angles = new int[ values.length ];
      int total = 0;
      //calcula a somatória total dos valores
      for( int i=0; i<values.length; i++ ) {
         total += values[i];
      }
      //calcula os ângulos para cada pedaço
      for( int i=0; i<values.length; i++ ) {
         angles[i] = (360 * values[i]) / total;
      }
      return angles;
   }
   
   /**
    * Retorna a imagem do gráfico em pizza.
    * @return Retorna um objeto do tipo ImageIcon.
    */
   public ImageIcon getImageIcon() {
      return new ImageIcon( imageBuffer );
   }
   
   /**
    * Retorna o buffer da imagem do gráfico em pizza.
    * @return Retorna um objeto do tipo BufferedImage.
    */
   public BufferedImage getBufferedImage() {
      return imageBuffer;
   }
}
Esta classe gera a imagem internamente já no próprio construtor da classe. Para pegar a imagem a ser exibida, utilizamos o método getImageIcon(). Para exibirmos a imagem do gráfico gerado, podemos aproveitar o exemplo anterior e apenas trocar a linha onde é criado o JLabel com a imagem, pelas seguintes linhas:
Código:
int[] valores = { 20, 10, 60, 90, 180 };
PieChart pie = new PieChart( valores, 200, 200, Color.WHITE );
JLabel lbl = new JLabel( pie.getImageIcon( ) );
ecutando nossa aplicação, veremos a seguinte tela:
[Java Basico] Criando Imagens Em Java Img2t
Viu como é simples? Com algumas linhas de código, escreves uma classe que representa e desenha uma gráfico em pizza, que é muito utilizado em aplicações comerciais. Isto mostra o poder e a facilidade de Java para manipulação deste tipo de aplicação. As APIs oferecidas pela Sun são extremamente poderosas. Às vezes desejamos não apenas gerar e apresentar as imagens, mas podemos também salvá-las em disco, e para isso utilizaremos a classe ImageIO, do pacote javax.imageio. Esta API do Java, permite salvar as imagens nos formatos JPEG e PNG. Infelizmente, por motivos de licensa, não é possível salvar no formato GIF. Mas existem APIs de terceiros para salvar as imagens no formato GIF. O Google pode te dar uma boa ajuda. O procedimento para gravar a imagem em disco é simples, veja: ImageIO.write( pie.getBufferedImage(), "png", new File("img.png") ); O primeiro parâmetro do método estático write() é o buffer da imagem gerada, depois o tipo da imagem, que no nosso caso é PNG e por último o File que representa qual o arquivo a ser criado. Uma outra opção do método write() é informar um OutputStream ao invés de um File. Com isso, podemos facilmente fazer um Servlet Java que gera uma imagem. Exemplo:
Código:
response.setContentType("image/png");
OutputStream os = response.getOutputStream();
ImageIO.write(buffer, "png", os);
os.close();
Neste caso mudamos o content type para image/png, que é uma imagem PNG. Em seguida passamos o OutputStream de resposta com o cliente web para o método write(), que grava na resposta os dados da imagem gerada e representada por buffer. Simples! Por vezes, desejamos incrementar nossas imagens, adicionando um texto decorativo, e isto é tão simples quanto gerar a própria imagem. Podemos, inclusive, escolher a fonte, o tamanho e a posição do texto. Vejam o exemplo:
Código:
Font font = new Font("Courier", Font.BOLD, 30);
g.setColor( Color.BLUE );
g.setFont( font );
g.drawString("Warlock200",0,20);
Isto fara que crie uma imagem com o nome que eu coloquei para fazer com que ele desenhe no caso o nome "Warlock200";
bem isso ai foi bem simples espero que tenham gostado e até mais Smile

warlock200
warlock200
Membro
Membro

Mensagens : 179

Ir para o topo Ir para baixo

[Java Basico] Criando Imagens Em Java Empty Re: [Java Basico] Criando Imagens Em Java

Mensagem por jpkadilo Seg 17 Dez 2012, 21:22

Uma dica pesquise sobre java2D é mais eficiente essa técnica ai é digamos um tanto lenta pra games.
Mas gostei do tutorial !!!!!!! continue assim !!!!!!!!
avatar
jpkadilo
Membro
Membro

Mensagens : 167

Ir para o topo Ir para baixo

[Java Basico] Criando Imagens Em Java Empty Re: [Java Basico] Criando Imagens Em Java

Mensagem por warlock200 Seg 17 Dez 2012, 21:30

jpkadilo escreveu:Uma dica pesquise sobre java2D é mais eficiente essa técnica ai é digamos um tanto lenta pra games.
Mas gostei do tutorial !!!!!!! continue assim !!!!!!!!
vlw amigo.. eu estou aprendendo programacao ainda mais estou aprendendo e compartilhado (estilo torrent ^^) mais irei estudar 2d sim ^^
warlock200
warlock200
Membro
Membro

Mensagens : 179

Ir para o topo Ir para baixo

[Java Basico] Criando Imagens Em Java Empty Re: [Java Basico] Criando Imagens Em Java

Mensagem por RedBuster Seg 17 Dez 2012, 21:52

Só no estilo torrent em kkkkkk.

Belo tutorial , vai ajudar iniciantes em Java xD
+1 Crédito pelo incentivo e iniciativa!!
RedBuster
RedBuster
Membro
Membro

Mensagens : 205

http://imakersdev.forumeiros.com

Ir para o topo Ir para baixo

[Java Basico] Criando Imagens Em Java Empty Re: [Java Basico] Criando Imagens Em Java

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos