我正在尝试在Processing中运行https://github.com/anfractuosity/LSD
GUI.java是不兼容的,因为它使用swing的GUI
如何更改它以便它调用Processing的GUI?
我试过了几个组合
https://forum.processing.org/two/discussion/12774/embedding-papplet-in-java-jframe
但我无法做到对。
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();
}
}
答案 0 :(得分:1)
你不能只改变一些事情并让这段代码在Processing中有效。 Swing和Processing完全不同。
您将不得不退后一步,了解您的代码所做的事情。用英语描述它的功能。然后使用该英语并实现在Processing中完成相同操作的代码。
为了让球滚动,这里有一些不同之处:
PApplet
代替JFrame
。PImage
代替BufferedImage
。PVector
类而不是Point
。JLabel
等组件。但就像我说的那样,它并不像简单地替换几个关键词并让它起作用那么简单。您必须程序执行的操作,然后在处理中执行此操作。
更多信息可在the reference中找到。请尝试一下,如果卡住,请发布MCVE。祝好运。