Java 将swing GUI更改为处理GUI
我正在尝试运行处理。 java不兼容,因为它使用swing的GUI。 如何更改它以使其调用处理的GUI? 我已经试过几次了 但我做不好Java 将swing GUI更改为处理GUI,java,swing,processing,Java,Swing,Processing,我正在尝试运行处理。 java不兼容,因为它使用swing的GUI。 如何更改它以使其调用处理的GUI? 我已经试过几次了 但我做不好 import javax.swing.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.awt.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class GUI extends JFrame {
GUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
BufferedImage myPicture = ImageIO.read(new File("piet.jpg"));
Graphics2D g2d = myPicture.createGraphics();
int x = myPicture.getWidth();
int y = myPicture.getHeight();
HashSet<Line> lines = new HashSet<Line>();
double [] arr = myPicture.getData().getPixels(0,0,x,y,new double[x*y*3]);
double [] arr2 = new double[x*y];
System.out.println(arr.length);
int c=0;
for(int i = 0; i < arr.length-3; i+=3) {
double B = arr[i];
double G = arr[i+1];
double R = arr[i+2];
double level = R * 0.2126 + G * 0.7152 + B * 0.0722;
arr2[c++] = level;
}
LSD lsd = new LSD();
double [] out = lsd.lsd(arr2,x,y);
for(int i = 0; i < lsd.n_out; i++) {
for (int j = 0; j < 7; j++)
lines.add(new Line(out[7 * i + 0], out[7 * i + 1],
out[7 * i + 2], out[7 * i + 3]));
}
for ( Line l : lines) {
g2d.drawLine((int)l.x1,(int)l.y1,(int)l.x2,(int)l.y2);
}
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
add(picLabel);
} catch (IOException e) {
}
setSize(800,800);
setVisible(true);
}
public static void main(String [] args){
new GUI();
}
}
您不能仅仅更改几件事,然后让这些代码在处理过程中工作。Swing和Processing是完全不同的 您必须后退一步,了解代码的功能。用英语描述它的功能。然后使用英语,实现在处理过程中完成相同任务的代码 为了让事情顺利进行,这里有几个区别: 处理使用PApplet而不是JFrame。 处理使用PImage而不是BuffereImage。 处理使用PVector类而不是Point。 处理没有像JLabel这样的组件。 但正如我所说的,这并不是简单地替换几个关键字并让它工作。你必须接受程序所做的,然后在处理过程中这样做
更多信息可在中找到。请尝试一下,如果你卡住了,请发一封邮件。祝你好运 好的,谢谢你的提示。即使是上面的内容也很有帮助。因此,如果我添加import processing.core.PApplet;然后公共类GUI扩展了PApplet{,GUI中会发生什么变化{setDefaultCloseOperationPApplet.EXIT_ON_CLOSE;?这是我不知道的部分get@daddydean翻译代码不是一行一行地修改。翻译代码的方法是用目标语言从头开始,朝着第一个程序实现的目标努力。你能用英语描述一下第一个程序的功能吗如果你有这个描述,拿着它,用这个描述作为指导,重新开始处理。我想我会试试。基本上代码应该做的是从图像中提取线段,就像一个非常简化的轮廓/边缘检测。结果如下:@daddydydean很酷。你能看懂代码并理解它吗它在做什么?你能用英语写下代码执行的步骤列表吗?避免使用特定于语言的关键字:比如显示窗口而不是显示JFrame。当你写下这些步骤列表后,你就能在处理过程中实现它们。代码翻译就是这样工作的。