Tenho um painel que faço um desenho em cima dele (qualquer desenho), daí queria colorir somente uma parte deste (assim como no paint tem a ferramenta de preenchimento, estou simulando uma).
Porém preciso recuperar a cor de um determinado ponto, tipo: getColor(x, y), onde x e y são as cordenadas do meu JPanel. Isso é porque preciso distinguir a borda ou outra cor das demais.
Bem, a dúvida é essa: Como faço para recuperar esta cor em um determinado ponto?
Não sei se fui claro o suficiente pois é meu primeiro tópico.
Crie um objeto do tipo BufferedImage do tamanho do JPanel. Em seguida use BufferedImage.createGraphics() para obter um objeto de desenho Graphics2D. Então, passe o objeto Graphics2D para o método JPanel.draw() do seu JPanel(). Nesse momento, o pixel que você deseja ler estará disponível na BufferedImage. Agora é só usar BufferedImage.getRGB() para obter o valor do pixel.
Luiz_Ot_io_S_F_Campo
Muito obrigado roger_rf, mas ainda não entendi uma parte:
Supondo que meu painel seja 400 x 400 ->
BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
Mando a referência para g ->
Graphics g = img.createGraphics();
Porém não acontece mais nada. Caso faça um g.fillRect(50, 50, 60, 60); logo após, ele não pinta o quadrado.
Será que poderia me ajudar novamente??
R
roger_rf
O método que citei mais abaixo serve apenas para ler os pixels do componente. Para desenhar sobre o componente, você terá de sobrescrever o método paintComponent() do componente:
Este método faz com que o gráfico seja colorido considerando as extremidades e o desenho que for feito (Ponto []p).
O problema é que há um estouro de pilha, mesmo colocando limitações.
Quem poder ajudar a resolver, agradeço
packagecomputacaografica;importjava.awt.*;importjava.awt.image.BufferedImage;/** * * @author Luiz Otávio */publicclassBoundaryFill{privatestaticfinalintTAMANHO_PAINEIS=255;privateColorcorPreenche,corContorno;Graphics2Dg2d;BufferedImageimg=newBufferedImage(TAMANHO_PAINEIS,TAMANHO_PAINEIS,BufferedImage.TYPE_INT_RGB);publicBoundaryFill(Ponto[]p,intnumPontos,ColorcorPreenche,ColorcorContorno){this.corPreenche=corPreenche;this.corContorno=corContorno;// cria a imagem sobre o Graphics2D g2d=img.createGraphics();// preenche todo o quadro de brancog2d.setColor(Color.white);g2d.fillRect(0,0,TAMANHO_PAINEIS,TAMANHO_PAINEIS);//preenche o gráfico com os pontos na cor do contornog2d.setColor(corContorno);for(inti=0;i<numPontos;i++){g2d.drawLine(p[i].x,p[i].y,2,2);}}publicvoiddraw(Graphicsg,intx,inty){// limita ao tamanho máximo do painelif((x<TAMANHO_PAINEIS&&x>=0)&&(y<TAMANHO_PAINEIS&&y>=0)){// recupera cor do pontoColorcorAtual=inqurirCor(x,y);// conectividade 4if(corAtual!=corContorno&&corAtual!=corPreenche){// Colore aquele ponto com a cor que foi solicitadag.setColor(corPreenche);g.fillOval(x,y,2,2);// atualiza o graphics2Dg2d.setColor(corPreenche);g2d.fillOval(x,y,2,2);draw(g,x+1,y);draw(g,x-1,y);draw(g,x,y+1);draw(g,x,y-1);}}}/* * Recupera a cor de um determinado ponto do painel * */privateColorinqurirCor(intx,inty){if(img.getRGB(x,y)==corPreenche.getRGB()){returncorPreenche;}elseif(img.getRGB(x,y)==corContorno.getRGB()){returncorContorno;}returnColor.WHITE;}}