Tag: 抗锯齿

如何inheritance系统的反别名设置,以便将文本绘制为像swing一样的屏幕外图像?

当我在Java 6下运行swing GUI应用程序时,它们会自动使用我为所有字体配置的子像素抗锯齿设置。 与标准AA选项相比,结果有了很大改进。 但是当我绘制到图像时,我无法初始化图形上下文以使用系统的AA配置。 尝试使用Java的不同AA提示是一个失败的原因,因为没有子像素方法将适用于所有用户。 有没有办法inheritance给定图形上下文的系统AA设置,而不必选择一个并明确设置提示? 目前我必须使用GASP AA来避免标准AA用小字体给出的可怕结果。 我试过没有为文本AA设置任何内容,也没有设置任何AA提示。 更新2010-01-05 我想我已经把它钉死了; 当直接绘制到AWT图形上下文时,子像素AA提示似乎只被尊重; 当我画到双缓冲图像时,它只是标准AA; 但是当我绕过双缓冲图像时,完成了子像素AA。 否则,The_Fire的答案将适用于具有Swing可用的JVM(但不适用于J2ME JVM); 请注意,The_Fire的答案不能使用AWT组件(使用新的Label()而不是新的JLabel()失败),可能是因为在将组件实现到显示器之前无法提取FontRenderContext。 我目前为目标图像获取图形上下文的代码如下所示: try { if((dbImage=dctRoot.createImage(wid,hgt,1))!=null) { // if createImage returns null or throws an exception the component is not yet displayable dbGraphics=(Graphics2D)dbImage.getGraphics(); if(dctRoot.properties.getBoolean(“Antialias”,true)) { try { // set AA on overall dbGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING ,RenderingHints.VALUE_ANTIALIAS_ON); // set text AA to […]

Java Graphics2D浮点精确drawOval替代?

所以我试图绘制一个圆弧并围绕其圆形端点放置一个圆圈,但由于四舍五入到最近的像素,我遇到了问题。 这在一些但不是所有情况下都可见。 有没有办法使用浮点和消除锯齿绘制圆圈以消除此舍入错误? 您可以运行此代码来查看问题。 为了清晰起见,我绘制了长度为0的弧(显示为大点)而不是全弧。 import java.awt.*; import javax.swing.*; public class Example extends JFrame { private int CENTER = 200; private static int WINDOW = 400; private int LEFT = 50; private int TOP = 50; private int DIM = 300; private int DIAMETER = 26; public Example () { super(); } public void paint […]

如何将抗锯齿应用于像GraphicsContext.fillArc()这样的javafx方法?

我是javafx的新手,我正在使用其渲染函数编写游戏,特别是在Eclipse中使用GraphicsContext.fillArc()等。 这是我目前的代码: BorderPane root = new BorderPane(); Scene scene = new Scene(root, 400, 400); primaryStage.setScene(scene); scene.getStylesheets() .add(getClass().getResource(“application.css”).toExternalForm()); Canvas canvas = new Canvas(400, 400); root.getChildren().add(canvas); GraphicsContext gc = canvas.getGraphicsContext2D(); new AnimationTimer() { public void handle(long currentNanoTime) { gc.setFill(Color.BLUE); gc.fillArc(150, 150, 100, 100, 0, 240, ArcType.ROUND); } }.start(); primaryStage.show(); 但是fillArc()方法在我的屏幕上呈现一个边缘fillArc()的形状。 我想要应用抗锯齿,以便边缘平滑。 但是我在GraphicsContext类中找不到任何相关的方法,并将scene的实例化更改为new Scene(root, 400, 400, false, SceneAntialiasing.BALANCED); […]

Java字体渲染

我一直在尝试增强我用Java编写的GUI系统以使用子像素抗锯齿并且已经成功,除了两个剩余的exception。 这是几个星期前我的另一个问题的后续问题 。 第一个问题是将设置渲染提示KEY_ANTIALIASING设置为VALUE_ANTIALIAS_ON会导致KEY_TEXT_ANTIALIASING在设置为LCD(子像素)AA值时被忽略。 任何人都可以对此有所了解吗? 目前我在渲染文本之前被迫使用VALUE_ANTIALIAS_OFF,并在渲染文本后将其重新打开(以便其他绘画,如圆圈等,是AA’d)。 下面的独立测试程序certificate了这个问题。 第二个问题是我找不到查询AA的底层操作系统设置,所以我必须做一个相当大的解决方法,即创建一个Swing JLabel,获取它的FontMetrics,得到它的FontRenderContext然后得到AA提示。 除了在一个程序中涉及Swing,否则完全不使用Swing,它将无法在运行任何J2ME JVM的设备上运行。 谁能建议一个更好的方法来做到这一点? 如果它需要J5或J6就没关系,因为当前的kludge已经需要J6(但只需要J4就是最好的)。 我已经尝试了每个默认设置并使用AWT组件而不是JLabel。 测试程序 该程序validation要使子像素AA工作,必须首先禁用一般AA设置。 (PS:我写入后台缓冲区,因为我的底层GUI确实如此,我想在等效的上下文中进行测试)。 import java.awt.*; import java.awt.event.*; public class AwtTestFrame1b extends Panel { private final Font font=new Font(Font.SANS_SERIF, Font.PLAIN, 16); private final int line=25; AwtTestFrame1b() { setBackground(SystemColor.control); } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; int py=0; py=paintText(g2d,py,null ,false); […]

如何在Java中绘制一个像样的圆圈

我尝试使用drawOval方法具有相同的高度和宽度,但随着直径的增加,圆圈变得更糟。 无论大小如何,我能做些什么才能拥有体面的圆圈。 我将如何在java或其他方法中实现抗锯齿。

图像上的Java文本

我在bufferedimage中加载一个图像,然后在上面写一些文字。在我添加文本后,它会使图像模糊,文本失真。 我有文本ANTIALIASING ON。 可以看作附件。

Java2D Graphics消除锯齿

我是Java的新手,并尝试使用Java2D Graphics来创建一个Image。 但输出是反锯齿的。 我尝试了很多方法来纠正它,但是没有用。 角色变得扭曲或锯齿状。 public BufferedImage createNameOnButton(String label) { int messageWidth = 0; Font font = new Font(“Arial”, Font.PLAIN, 11); BufferedImage bi = new BufferedImage( 10, 10, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D) bi.getGraphics(); g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint( RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2d.setFont(font); bi = g2d.getDeviceConfiguration() .createCompatibleImage(500, 30, Transparency.BITMASK); FontMetrics fm = bi.getGraphics().getFontMetrics(font); int […]