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 :
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:
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:
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:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
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:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
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:
bem isso ai foi bem simples espero que tenham gostado e até mais
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();
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:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
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;
}
}
- Código:
int[] valores = { 20, 10, 60, 90, 180 };
PieChart pie = new PieChart( valores, 200, 200, Color.WHITE );
JLabel lbl = new JLabel( pie.getImageIcon( ) );
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
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();
- Código:
Font font = new Font("Courier", Font.BOLD, 30);
g.setColor( Color.BLUE );
g.setFont( font );
g.drawString("Warlock200",0,20);
bem isso ai foi bem simples espero que tenham gostado e até mais