And*_*rea 2 java graphics swing pixel
在 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)
我建议不要使用Graphics#drawLine像素完美绘画。您提供的协调被解释为位于您定位的“像素”的左上角(引号中的像素,因为由于 ui 缩放 gui 空间中的单个像素实际上可能是屏幕像素的 2x2 网格或更多)。
1假设您正在绘制水平线或垂直线,您绘制的线条的笔触宽度将“介于”两个像素之间。这将根据屏幕分辨率和抗锯齿设置产生不同的结果。
而是使用Graphics#fillRect例如代替
g.drawLine(x1, y, x2, y);
Run Code Online (Sandbox Code Playgroud)
用:
g.fillRect(x1, y, x2 - x1, 1);
Run Code Online (Sandbox Code Playgroud)
绘制单个像素
g.drawLine(x, y, x, y);
Run Code Online (Sandbox Code Playgroud)
绝对是不正确的方法。对于Graphics对象来说,这看起来像是一条没有长度的线。如果它真的绘制它完全依赖于跨平台/屏幕/等可能不一致的实现。而是绘制一个具有width和height的矩形1:
g.fillRect(x, y, 1, 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |