import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.util.*; public class Pildimuutus5 extends Frame implements MouseListener{ Image pilt2; BufferedImage pilt; int laius=400, korgus=300; int hx, hy; public Pildimuutus5(){ try{ pilt=new BufferedImage(laius, korgus, BufferedImage.TYPE_INT_RGB); Graphics g=pilt.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, laius/2, korgus); g.setColor(Color.blue); g.fillOval(laius/2-20, korgus/2-20, 40, 40); muudaPilt(); setSize(800, 200); setLocation(200, 100); setVisible(true); addMouseListener(this); }catch(Exception e){} } boolean kasVajaVarvida(int x, int y, int[] m, int algVarv, int uusVarv){ if(x<0 || y<0 || x>=laius || y>=korgus) return false; if(m[y*laius+x]==algVarv){ // System.out.println(x+ " "+ y); m[y*laius+x]=uusVarv; return true; } return false; } public void muudaPilt(){ try{ int punktid[]=new int[laius*korgus]; PixelGrabber pg=new PixelGrabber( pilt, 0, 0, laius, korgus, punktid, 0, laius); pg.grabPixels(); int uusVarv=(255<<24) | 0 << 16 | 255 << 8 | 0; int algVarv=punktid[hy*laius+hx]; LinkedList punktiLoetelu=new LinkedList(); punktiLoetelu.add(new Punkt(hx, hy)); while(punktiLoetelu.size()>0){ Punkt pt=(Punkt)punktiLoetelu.removeFirst(); punktid[pt.y*laius+pt.x]=uusVarv; if(kasVajaVarvida(pt.x-1, pt.y, punktid, algVarv, uusVarv)){ punktiLoetelu.add(new Punkt(pt.x-1, pt.y)); } if(kasVajaVarvida(pt.x+1, pt.y, punktid, algVarv, uusVarv)){ punktiLoetelu.add(new Punkt(pt.x+1, pt.y)); } if(kasVajaVarvida(pt.x, pt.y-1, punktid, algVarv, uusVarv)){ punktiLoetelu.add(new Punkt(pt.x, pt.y-1)); } if(kasVajaVarvida(pt.x, pt.y+1, punktid, algVarv, uusVarv)){ punktiLoetelu.add(new Punkt(pt.x, pt.y+1)); } } pilt2=Toolkit.getDefaultToolkit().createImage( new MemoryImageSource(laius, korgus, punktid, 0, laius)); }catch(Exception e){e.printStackTrace();} } public void mousePressed(MouseEvent e){ hx=e.getX(); hy=e.getY()-50; muudaPilt(); repaint(); } public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void paint(Graphics g){ g.drawImage(pilt, 0, 50, this); g.drawImage(pilt2, laius, 50, this); } public static void main(String argumendid[]){ new Pildimuutus5(); } class Punkt{ int x, y; public Punkt(int ux, int uy){x=ux; y=uy;} } }