Desenhar sobre imagem

galera… seguinte… mais leigo em java que eu aqui acho que não tem heheheeh to com um problema que é o seguinte… quero carregar uma imagem em um frame e desenhar por cima dela… tipo… depois da imagem ja carregada quero poder desenhar uma reta de tal ponto(x,y) até outro (x,y) só estou conseguindo fazer uma coisa ou outra. aqui vai o código se alguem puder me ajudar eu agradeço desde já.

[code] label = new JLabel();
Container con = getContentPane();
con.add(label, “Center”);

String name = "C:/mapafinal.jpg";

label.setIcon(new ImageIcon(name));

[/code]

esse ai de cima ta carregando a imagem

o de baixo é a classe usada para desenhar

class PainelDesenhaFormas extends JPanel //classe que desenha rotas 
{
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.blue);
        for(int x=0; x<400;x++)
        {
        g.drawRect(x, 10, 1, 1);
        }
        
        for(int x=100; x<500;x++)
        {
        g.drawRect(100, x, 2, 2);
        }
         
        g.drawRoundRect(100, 10, 80, 30, 15, 15);        
        g.setColor(Color.red);
        for (int i = 10; i > 0 ; i--)
            g.drawOval(100, 100, i, i);
    }    
}

to usando esse codigo para desenhar as formas

 getContentPane().add(new PainelDesenhaFormas());

o négocio é que dependendo de como faço isso ou carrega imagem ou desenha. não tem como desenhar sobre a imagem ja carregada.???

Cara, acho que, ao invés de utilizar o JLabel.setIcon(), você pode usar o método drawImage do JPanel.

Aí você desenharia primeiro a imagem sobre o Graphics do “PainelDesenhaFormas” e, depois, desenharia as retas neste mesmo objeto Graphics.

[]'s

[quote=“escordeiro”]Cara, acho que, ao invés de utilizar o JLabel.setIcon(), você pode usar o método drawImage do JPanel.

Aí você desenharia primeiro a imagem sobre o Graphics do “PainelDesenhaFormas” e, depois, desenharia as retas neste mesmo objeto Graphics.

[]'s[/quote]

não intendi qndo vc falow em desenhar sobre o graphics… vou utilizar o método drawImage dentro da classe PainelDesenhaForma ???

Acho que pode ser mais ou menos assim:

[code]
class PainelDesenhaFormas extends JPanel //classe que desenha rotas
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);

    // desenha a imagem no Graphics
    g.drawImage(...);

    g.setColor(Color.blue); 
    for(int x=0; x<400;x++) 
    { 
    g.drawRect(x, 10, 1, 1); 
    } 
    
    for(int x=100; x<500;x++) 
    { 
    g.drawRect(100, x, 2, 2); 
    } 
      
    g.drawRoundRect(100, 10, 80, 30, 15, 15);        
    g.setColor(Color.red); 
    for (int i = 10; i > 0 ; i--) 
        g.drawOval(100, 100, i, i); 
}    

} [/code]

Aí você vai ter que passar a imagem já carregada para o método drawImage, mas dá uma olhada na documentação da API que você vai poder carregar a imagem para um ImageIcon, como já está fazendo, e, a partir do ícone, pegar a Imagem para usar nesse método.

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html

[]'s

galera… ja entendi oque tenho que fazer… o código ficou assim

class PainelDesenhaFormas extends JPanel//classe que desenha rotas 
{
	
     

         Image image = Toolkit.getDefaultToolkit().getImage("mapa.jpg");
	


    public void paintComponent(Graphics g)
    {   
      

	    
	     g.drawImage(this.image, 0, 0);

        super.paintComponent(g);
       
    
       

        g.setColor(Color.blue);
        for(int x=0; x<400;x++)
        {
        g.drawRect(x, 10, 1, 1);
        }
        
        for(int x=100; x<500;x++)
        {
        g.drawRect(100, x, 2, 2);
        }
         
        g.drawRoundRect(100, 10, 80, 30, 15, 15);        
        g.setColor(Color.red);
       
            g.drawOval(100, 100, 10, 10);


 }
 
 }   

mas ta dando esse erro… é como se não estivesse reconhecendo o método drawImage … alguem pode me ajudar a decifrar qual o problema…

[b]C:Arquivos de programasXinox SoftwareJCreator LEMyProjectsgbTrabalhoFinaGrafos.java:48: cannot resolve symbol
symbol : method drawImage (java.awt.Image,int,int)
location: class java.awt.Graphics
g.drawImage(this.image, 0, 0);
^
1 error

Process completed.[/b]

Estão faltando alguns argumentos na chamada de drawImage :roll:.

As assinaturas que você pode usar são:

Referências:
[1] Java 1.4.2 API Specification - http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html

ah blz… agora rodou… porém não carregou a image…

[code]class PainelDesenhaFormas extends JPanel//classe que desenha rotas
{

     Image image = Toolkit.getDefaultToolkit().getImage("C:/mapafinal.jpg");



public void paintComponent(Graphics g)
{   
  

    
     g.drawImage(this.image, 10, 10, this);

    super.paintComponent(g);
   

   

    g.setColor(Color.blue);
    for(int x=0; x<400;x++)
    {
    g.drawRect(x, 10, 1, 1);
    }
    
    for(int x=100; x<500;x++)
    {
    g.drawRect(100, x, 2, 2);
    }
     
    g.drawRoundRect(100, 10, 80, 30, 15, 15);        
    g.setColor(Color.red);
   
        g.drawOval(100, 100, 10, 10);

}

}
[/code]

tipo… o codigo que uso pra carregar a imagem

         Image image = Toolkit.getDefaultToolkit().getImage("C:/mapafinal.jpg");

testei em outra classe e parece não estar carregando a imagem… a imagem esta no diretorio… só há como carregar a imagem desta forma???

está correto a assinatura do método draw.Image??

valew por tudo até agora viu kboco!! :lol:

rapah… valew… funcionou que é uma blz… eheheheh :slight_smile: valew mesmo.