簡體   English   中英

將swing GUI更改為Processing GUI

[英]Change swing GUI to Processing GUI

我正在嘗試在處理中運行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();

    }


}

您不能只更改幾件事並使此代碼在Processing中工作。 搖擺和處理完全不同。

您將不得不退后一步,了解代碼的功能。 用英語描述它的作用。 然后使用該英語,並實現在Processing中完成相同任務的代碼。

為了使球滾動起來,這里有一些區別:

  • 處理使用PApplet而不是JFrame
  • 處理使用PImage而不是BufferedImage
  • 處理使用PVector類代替Point
  • 處理沒有像JLabel這樣的組件。

但是就像我說的那樣,這不只是替換幾個關鍵字並使之起作用那么簡單。 您必須先執行程序的操作 ,然后在“處理”中執行該操作。

參考資料中可以找到更多信息。 請嘗試嘗試,如果遇到問題,請發布MCVE 祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM