如何在没有间隙的情况下逐像素渲染图形?Java Swing

如何在没有间隙的情况下逐像素渲染图形?Java Swing,java,swing,graphics,pixel,Java,Swing,Graphics,Pixel,在Java中,我使用JFrame逐像素绘制一些分形,但是drawLine使用int参数,有些像素我无法达到。例如,如果我将一条线绘制为: g.drawLine(0,100,500,100); 然后画一条实线。如果我将其绘制为一系列像素: for (int i=0; i<500;i++) g.drawLine(i,100,i,100); for(int i=0;i我建议不要使用Graphics#drawLine进行像素完美的绘制。您给出的坐标被解释为位于目标“像素”的左上角(引号中的像素

在Java中,我使用
JFrame
逐像素绘制一些分形,但是
drawLine
使用
int
参数,有些像素我无法达到。例如,如果我将一条线绘制为:

g.drawLine(0,100,500,100);
然后画一条实线。如果我将其绘制为一系列像素:

for (int i=0; i<500;i++) g.drawLine(i,100,i,100);

for(int i=0;i我建议不要使用
Graphics#drawLine
进行像素完美的绘制。您给出的坐标被解释为位于目标“像素”的左上角(引号中的像素,因为由于ui缩放,gui空间中的单个像素实际上可能是2x2或更多的屏幕像素网格)

笔划宽度为
1
时,假设绘制的是水平线或垂直线,则绘制的线将在两个像素之间。这将根据屏幕分辨率和抗锯齿设置产生不同的结果

使用
Graphics#fillRect

g.拉丝(x1,y,x2,y);
使用:

g.fillRect(x1,y,x2-x1,1);
绘制单个像素的步骤

g.抽绳(x,y,x,y);
绝对是不正确的方法。对于
图形
对象,这看起来像一条没有长度的线。如果它实际绘制,则完全取决于平台/屏幕/等的实现。 而是绘制一个宽度和高度分别为
1
的矩形:

g.fillRect(x,y,1,1);

欢迎使用堆栈溢出。为了获得更好的帮助,请尽快发布适当的代码,这显示了您解决问题的最佳尝试。发布您尝试执行的操作的图像。不知道是否会有帮助,但是。1)自定义绘制应通过覆盖
paintComponent()
2)调用
super.paintComponent(g)
作为确保清除背景的第一句话。3) 代码对我来说很好用。我看到一个黑色的正方形。我在Windows10上使用JDK11。可能是操作系统的问题吗?我发布的第二张图片应该看起来像一个实心正方形,100像素乘100像素,但画面的缩放比例似乎是1.5,我得到了一个150×150像素的正方形,填充了四分之九的像素。请注意,只有当屏幕使用的缩放因子不是100%的倍数时,问题才会出现。Andrea缩放由操作系统控制。
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);
 
     }
}