- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 JPanel
上绘图时,我可以将抗锯齿设置为渲染提示,然后绘制一条边缘平滑的线。
但是,如果我创建一个 BufferedImage
并在其上使用抗锯齿绘制相同的线条,然后我使用 JPanel.drawImage
绘制缓冲图像,该行被粗略地淹没(例如抗锯齿=关闭)。
我无法确定如何在带抗锯齿功能的缓冲图像上画一条线。有人可以阐明这是如何完成的吗?
在下面的示例中,我只是创建了两个 JFrame
。在一个框架中,我创建了一个面板并直接在其上绘制。在另一个框架中,我创建了一个面板,然后是我绘制的缓冲图像,然后使用 JPanel.drawImage
进行显示。我希望缓冲图像中显示的线条使用抗锯齿绘制。
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args){
doDirect();
doBuffered();
}
public static void doBuffered(){
JFrame frame = new JFrame();
frame.setTitle("BufferedImage drawn with antialiasing on");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel canvas = new JPanel(){
@Override
protected void paintComponent(Graphics g){
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2d = image.createGraphics();
ig2d.setColor(Color.BLACK);
ig2d.setStroke(new BasicStroke(3));
ig2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
ig2d.drawLine(10, 10, 70, 90);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(image, 0, 0, null);
}
};
canvas.setPreferredSize(new Dimension(100, 100));
frame.getContentPane().add(canvas, BorderLayout.CENTER);
frame.setEnabled(true);
frame.pack();
frame.setVisible(true);
}
public static void doDirect(){
JFrame frame = new JFrame();
frame.setTitle("Directly drawn with antialiasing on");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel canvas = new JPanel(){
@Override
protected void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLACK);
g2d.setStroke(new BasicStroke(3));
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawLine(10, 10, 70, 90);
}
};
canvas.setPreferredSize(new Dimension(100, 100));
frame.getContentPane().add(canvas, BorderLayout.CENTER);
frame.setEnabled(true);
frame.pack();
frame.setVisible(true);
}
}
最佳答案
我运行了您的示例,两种绘图方法似乎都应用了抗锯齿。可能是你使用的jdk版本有问题。我在使用 jdk 1.8.0_77 的 Windows 上运行,也尝试使用 jdk 1.7.0_79。
关于java - 如何在 BufferedImage 上使用具有抗锯齿功能的 Graphics2D.drawline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087056/
在我的应用程序中,我需要绘制一个方程。绘制的方程将由许多小的直线组成。当我在 for 中使用 DrawLine 方法绘制它时,我获得了比使用 DrawLines 方法时更高的质量。 Graphics
我在 C++ 中使用 GDI+ 绘制图表控件。我想知道上述两个函数之间是否存在性能差异。我不懒惰为写代码DrawLines() 但正是这样做使我的代码变得复杂。所以我权衡是否以降低可读性和潜在增加错误
我有一个绘画程序,并且我已经完成了所有按钮和 slider ,但是我在实际绘画本身方面遇到了问题。当我将光标拖过屏幕而不是一条不间断的线时,我几乎得到了一条我不想要的虚线。以下是 JPanel 和 B
一般来说,对 Swing 和制作 GUI 有点陌生,我一直在使用 DrawLine 方法来创建“地板”,并且它一直在为 PaintComponent 类中的坐标变量本地工作,但是我想更改使用 acti
所以我将这个类放在一个 JPanel 实现类中。 private static class Line extends JComponent { private static final
我需要有关此代码的帮助。我的 g.drawLine(0,0,300,300) 不起作用。一直工作到周一,不知道出了什么问题。我使用 g.drawLine(0,0,300,300) 来在使用plota_
我正在创建一个随机绘制小行星的游戏(使小行星呈现锯齿状外观)。经过研究,我只发现你可以填充原始形状。有谁知道我可以用来填充这些形状的方法? package view.game_object; impo
我被 canvas.drawLines() 卡住了。 我的应用程序显示轨道 om map View ,但生成的线条很糟糕。有没有人看到这样的行为?即,线的宽度不同,甚至不是“正方形”,而是菱形,有时甚
我想知道,通常情况下,你们如何为从 Paint.drawLine 绘制的线投下阴影?据我所知,Paint.setShadowLayer 仅对 Paint.drawText 有影响,但对 Paint.d
开始在 Delphi 中使用 GDI+。需要画几条平滑的直线。例如试图在表格上画对角线(从左上角到右下角)但什么也没有出现。该代码有什么问题(Delphi XE3、Windows 10 x64)? u
我试图使用 alpha channel 通过 CustomPaint 对线条颜色应用透明度的Canvas.drawLine() . 问题 但是,alpha channel 上的颜色调整对结果没有影响,
这是我到目前为止的代码,其中包含一些打印行,只是为了确保它实际上进入了该方法。由于某种原因, Canvas 上没有绘制任何内容,我有一个与此类似的程序,就绘图而言,它工作得很好。这个有什么问题吗? i
我有一段代码需要绘制数千条线(6000 到 50000 之间)。 我随后修复了一个不相关的错误,暴露了一些有趣的东西;也就是说,当这些线条很长(比如 30k 像素)时,drawLine 函数会占用我的
我正在使用 C#.NET 3.5 在 Windows CE 中绘制一条指向 Graphics 对象的线。 我使用的代码如下所示: e.Graphics.DrawLine(new Pen(Color.F
我已经尝试了很多方法,但我的代码仍然拒绝在 Canvas 上简单地画一条线。我注释掉的每一次尝试要么使程序崩溃,要么不显示该行。我真的很难理解如何做到这一点,我不断收到关于使用线程或 onDraw 或
我正在用安卓开发游戏。我是初学者,所以我对android了解不多。我遇到了与 Canvas 相关的问题。我正在尝试设计包含圆网格(5 * 6)的板。 我想在它们之间显示线条,使它们看起来像盒子。为此,
问题:除了在输入点上画圆之外,还有什么更好的方法来实现在屏幕上画线的功能? 详细信息:我正在尝试编写一个基本上会画一条线的函数。但是该线不会是普通的彩色线。这条线会让用户通过那条线将一个图像的像素复制
import java.awt.event.*; import java.awt.*; import javax.swing.*; public class Line{ public static
我知道这很简单,但我不明白为什么单击按钮后 Form1 上没有绘制任何内容: namespace GeometryTest { public partial class Form1 : For
给定以下代码: import javax.swing.*; import java.awt.*; public class NewClass extends JPanel { public v
我是一名优秀的程序员,十分优秀!