java如何实现填充算法,谢谢啦~

finalwhite 2009-03-26 06:26:32
这是我的程序:
Paint.java

import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.Vector;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

public class Paint extends JPanel implements MouseListener,MouseMotionListener{
Vector v = new Vector();
Vector vec = new Vector();
private Graphics g;
//Robot rb = null;

public void paint(Graphics g) {//画笔,这部分应该没错
int[] x, y;
for (int j = 0; j < vec.size(); j++) {
x = new int[((Vector) vec.get(j)).size()];
y = new int[((Vector) vec.get(j)).size()];
for (int i = 0; i < ((Vector) vec.get(j)).size(); ++i) {
Point p = (Point) ((Vector) vec.get(j)).get(i);
x[i] = p.x;
y[i] = p.y;
}
g.drawPolyline(x, y, ((Vector) vec.get(j)).size());
}
}

public Paint() {
vec.add(v);
addMouseMotionListener(this);
addMouseListener(this);

}
void boundaryFill4 (int x, int y, Color fillColor)//递归算法
{
Color interiorColor=Color.black;//当前坐标颜色
interiorColor=getpixel(x, y);
if (
interiorColor != fillColor){
setPixel (x,y); // set color of pixel to fillcolor.
boundaryFill4 (x+1, y, fillColor);
boundaryFill4 (x-1, y, fillColor);

boundaryFill4 (x, y+1, fillColor);
boundaryFill4 (x, y-1, fillColor);
}
}
Color getpixel(int x,int y){//获得当前坐标颜色信息

Robot rb = null;
try {
rb = new Robot();
} catch (AWTException ex) {
Logger.getLogger(Paint.class.getName()).log(Level.SEVERE, null, ex);
}

return rb.getPixelColor(x, y);
}
void setPixel(int x,int y){//在当前坐标画一个黑点
g=getGraphics();
System.out.print("1111111");
g.drawLine(x, y, x, y);
}
public static void main(String[] args){
Paint pa = new Paint();
JFrame jf = new JFrame();
jf.setLayout(new BorderLayout());
jf.add(new Paint(),BorderLayout.CENTER);
jf.setTitle("Paint");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(500,500);
jf.setVisible(true);
}

public void mouseClicked(MouseEvent e) {
if(e.getButton()==1){

boundaryFill4(e.getX(),e.getY(),Color.black);
}

}

public void mousePressed(MouseEvent e) {

}

public void mouseReleased(MouseEvent e) {
v = new Vector();
vec.add(v);

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mouseDragged(MouseEvent e) {

Point p = e.getPoint();
v.add(p);
repaint();

}

public void mouseMoved(MouseEvent e) {

}
}
我对GUI不熟悉,在获得当前坐标颜色和在当前坐标画一个点的方法上有错误,请各位大大帮忙看下!!!
我的意思就是画一个封闭的空间,然后在空间里点一点就可以给空间填色。
我的想法是在封闭的空间内点击鼠标,获得当前坐标颜色,判断它是否为黑色,如果不是就用递归算法进行填色。。。
...全文
225 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chentao19860501 2009-03-30
  • 打赏
  • 举报
回复
四向连通递归填充算法:
  void BoundaryFill4(int x, int y, long FilledColor, long BoundaryColor)
  {
    long CurrentColor;
    CurrentColor = GetPixelColor(x,y);
    if (CurrentColor != BoundaryColor && CurrentColor != FilledColor)
    {
     SetColor(FilledColor);
     SetPixel (x,y);
     BoundaryFill4(x+1, y, FilledColor, BoundaryColor);
     BoundaryFill4(x-1, y, FilledColor, BoundaryColor);
     BoundaryFill4(x, y+1, FilledColor, BoundaryColor);
     BoundaryFill4(x, y-1, FilledColor, BoundaryColor);
    }
  }
    该算法的优点是非常简单,缺点是需要大量栈空间来存储相邻的点。
chanfish 2009-03-30
  • 打赏
  • 举报
回复
明天来看2楼的解答,哈哈
gentalguo 2009-03-30
  • 打赏
  • 举报
回复
哦~~呵呵,种子填充的四联通算法啊。呵呵。今天晚了,下班了。明天再看看吧。呵呵
chanfish 2009-03-26
  • 打赏
  • 举报
回复
虽然不懂,路过,顶一下。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧