首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将swing GUI更改为处理GUI

将swing GUI更改为处理GUI
EN

Stack Overflow用户
提问于 2018-03-06 08:30:49
回答 1查看 193关注 0票数 0

我正在尝试在处理中运行https://github.com/anfractuosity/LSD

GUI.java不兼容,因为它使用的是swing的图形用户界面。

如何更改它,使其改为调用Processing的GUI?

我已经尝试了几个来自

https://forum.processing.org/two/discussion/12774/embedding-papplet-in-java-jframe

但是我就是做不对。

代码语言:javascript
复制
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();

    }


}
EN

回答 1

Stack Overflow用户

发布于 2018-03-06 08:41:14

你不能仅仅改变几件事,然后让这段代码在处理过程中工作。Swing和处理是完全不同的。

你将不得不退后一步,理解你的代码是做什么的。用英语描述它的作用。然后获取英语,并实现在处理过程中完成相同任务的代码。

为了开始行动,这里有一些不同之处:

  • Processing使用PApplet而不是JFrame.
  • Processing,使用PImage而不是BufferedImage.
  • Processing,使用PVector类而不是Point.
  • Processing没有JLabel.

这样的组件

但就像我说的,这并不像替换几个关键字并让它工作那么简单。你必须获取程序所做的,然后在处理过程中这样做。

更多信息可以在the reference上找到。请尝试一下,如果你被卡住了,请发一个MCVE。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49121625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档