问题描述
我正在尝试编写类似绘画的程序(为了好玩),但为了挑战自己,我尝试使用 setRGB 方法来完成它,但是我发现当我快速移动鼠标时,笔划的行为变得不稳定,你呢?知道如何“软”从方法 getX 和 getY 获得的数据?或者为什么我得到随机点的颜色
在此先感谢您,并为我的英语感到抱歉。 :)
public class Canvas extends JPanel implements ActionListener,MouseMotionListener,MouseListener {
int canvasW;
int canvasH;
BufferedImage imgCanvas;
int X1;
int Y1;
int X0;
int Y0;
int sizeCanvas = 10;
int expcanvas = 2 * sizeCanvas - 1;
public Canvas(int width,int height) {
canvasH = height;
canvasW = width;
setPreferredSize(new Dimension(width,height));
setBorder(BorderFactory.createLineBorder(Color.black));
setBackground(Color.white);
CanvasImage(width,height);
addMouseListener(this);
addMouseMotionListener(this);
}
public BufferedImage CanvasImage(int width,int height) {
imgCanvas = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
return imgCanvas;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(imgCanvas,null,null);
}
@Override
public void actionPerformed(ActionEvent e) {
}
public void drawer() {
int deltaX = abs(X1 - X0);
int deltaY = abs(Y1 - Y0);
double m;
double b;
if (deltaX >= deltaY) {
if (deltaY == 0) {
m = 0;
} else {
m = (X0 - X1) / (Y0 - Y1);
}
b = Y0 - m * X0;
if (X1 > X0) {
for (int i = X0; i <= X1; i++) {
imgCanvas.setRGB(i,(int) (m * i + b),Color.BLACK.getRGB());
System.out.println(i + " ; " + (int) (m * i + b));
}
} else {
for (int i = X0; i >= X1; i--) {
imgCanvas.setRGB(i,Color.BLACK.getRGB());
System.out.println(i + " ; " + (int) (m * i + b));
}
}
} else {
if (deltaX == 0) {
m = 0;
} else {
m = (Y0 - Y1) / (X0 - X1);
}
b = X0 - m * Y0;
if (Y1 > Y0) {
for (int i = Y0; i <= Y1; i++) {
imgCanvas.setRGB((int) (m * i + b),i,Color.BLACK.getRGB());
}
} else {
for (int i = Y0; i >= Y1; i--) {
imgCanvas.setRGB((int) (m * i + b),Color.BLACK.getRGB());
}
}
}
}
@Override
public void mouseDragged(MouseEvent e) {
X1 = e.getX();
Y1 = e.getY();
drawer();
repaint();
X0 = X1;
Y0 = Y1;
}
@Override
public void mousepressed(MouseEvent e) {
X0 = e.getX();
Y0 = e.getY();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)