小编And*_*rea的帖子

如何在没有间隙的情况下逐像素绘制像素?Java Swing

在 Java 中,我使用JFrame逐个像素地绘制一些分形,但drawLine需要int参数并且有些像素我无法到达。例如,如果我画一条线:

g.drawLine(0,100,500,100);
Run Code Online (Sandbox Code Playgroud)

然后它画了一条实线。如果我将其绘制为一系列像素:

for (int i=0; i<500;i++) g.drawLine(i,100,i,100);
Run Code Online (Sandbox Code Playgroud)

然后它画一条虚线:两个像素,跳过一个,两个像素,跳过一个,等等。

如何修复它,使我的分形花边看起来不像是通过纱门看它?(填充了 4/9 像素)。

我真的很喜欢这个框架放弃 1.5 倍的缩放比例,只绘制整数,就像我相信的那样,但我也会采取其他一些解决方案,包括一个新的图形包,甚至学习一门新语言更好的图形控制。

Java 版本是我上个月下载时的最新版本,通过命令行在 Windows 10 计算机上运行。

示例输出,以便您可以看到“屏蔽门”: 递归莫比乌斯映射

最小工作示例:

import java.util.*;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class Example extends JPanel{
    public void paint(Graphics g){
        g.setColor(new Color(0,0,0));
        for(int i=0;i<100;i++)
            for(int j=0;j<100;j++)
                g.drawLine(i,j,i,j);
    }
    
     public static void main(String[] args) {  

        JFrame f = new JFrame("Inversion");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new Example());
        f.setSize(200, 200);
        f.setLocation(350, 25);
        f.setVisible(true);
 
     }
}
Run Code Online (Sandbox Code Playgroud)

输出:屏风门

java graphics swing pixel

2
推荐指数
1
解决办法
234
查看次数

标签 统计

graphics ×1

java ×1

pixel ×1

swing ×1