gpt4 book ai didi

java - repaint() 方法不适用于色调图像

转载 作者:行者123 更新时间:2023-12-02 13:26:49 25 4
gpt4 key购买 nike

Full project here https://github.com/jafetrd/easyImageEditor

我正在尝试使用paintComponent()将颜色应用于图像,这是我使用的类

public class Metodos extends JPanel{
...............................
........more code..........
................

public void setColor(Color color) {
this.color = color;
System.out.println("entrecolor");
repaint();
}
@Override
protected void paintComponent(Graphics g) {
if(imagen != null){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setXORMode(color); //this is the filter i want to repaint
if(detectar==false){
g2d.drawImage(imagen, getWidth()/2 - nuevoTamaño.width/2, getHeight()/2 - nuevoTamaño.height/2, nuevoTamaño.width, nuevoTamaño.height, this);
}else{
g2d.drawImage(imagen, posX-nuevoTamaño.width/2, posY-nuevoTamaño.height/2, nuevoTamaño.width, nuevoTamaño.height,this);
}
g2d.dispose();
}
}

我从另一个类调用 setColor() 来发送颜色对象并使用绘制组件内的 XOR 重新绘制图像,但它不起作用。我发送颜色的类如下所示:

 public final class Colores extends JFrame{
JColorChooser jc;
private Metodos m;
public Colores(){
componentes();
inicio();
m = new Metodos();
}

public final void componentes(){
setLayout(new BorderLayout());
// Metodos a = new Metodos();
jc = new JColorChooser();
jc.setPreviewPanel(new JPanel());
jc.getSelectionModel().addChangeListener((ChangeEvent arg0) -> {
m.setColor(jc.getColor());
super.repaint();
});

add(jc);
pack();
}
.........................
.........more code.........
...................................

Here I take the color from the JColorChooser and send to the method setColor() and repaint the image, but it does not work at all.

最佳答案

您的问题是糟糕且误导性设计的一个基本示例。

在您的Colores中,您创建一个Metodos的新实例...

public final class Colores extends JFrame{

JColorChooser jc;
private Metodos m;
public Colores(){
componentes();
inicio();
m = new Metodos();
}

这与您之前创建并放在屏幕上的实例有什么关系?

您需要将 Metodos 的引用传递给 Colores

看看Passing Information to a Method or a Constructor了解更多详情

public final class Colores extends JFrame {

JColorChooser jc;
private Metodos m;

public Colores(Metodos m) {
componentes();
inicio();
this.m = m;
}

并更新方法

case Colores:
new Colores(this).setVisible(true);
break;

事物不会神奇地结合在一起,您实际上需要向程序提供有效的信息,然后它才能运行。

但是,我鼓励您使用不同的机制。

JColorChooser 实际上内置了对话框支持...

case Colores:
Color newColor = JColorChooser.showDialog(this, "Colors", color);
if (newColor != null){
color = newColor;
repaint();
}
break;

如果用户不想选择颜色,则可以取消对话框

关于java - repaint() 方法不适用于色调图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43363342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com