我一直在尝试增强使用 Java编写的GUI系统以使用子像素抗锯齿功能,并且已经成功,除了两个剩余的异常.这是跟随我的 other question from a few weeks ago.

第一个问题是设置渲染提示KEY_ANTIALIASING为VALUE_ANTIALIAS_ON会导致KEY_TEXT_ANTIALIASING被设置为LCD(子像素)AA值时被忽略.任何人都可以看出这一点吗?目前,在渲染文本之前,我被迫使用VALUE_ANTIALIAS_OFF,并在渲染文本后重新开启(因此其他绘画,如圆形等)是AA’d).这个问题由下面的自包含测试程序证明.

第二个问题是我找不到方法查询AA的底层O / S设置,所以我必须做一个相当的kludgey解决方法,这是创建一个Swing JLabel,得到它的FontMetrics,得到它的FontRenderContext,然后得到AA提示.除了将Swing引入到其他方式绝对不使用Swing的程序中,它不会在运行任何J2ME JVM的设备上运行.有人可以建议一个更好的方式来做到这一点吗?如果需要J5或J6,这是可以的,因为目前的kludge已经需要J6(但只需要J4最好).我已经尝试了每个默认设置,并使用AWT组件而不是JLabel.

测试程序

该程序验证子像素AA工作时,必须首先禁用一般的AA设置. (PS:我写的是一个后台缓冲区,因为我的基础图形用户界面,我想在相当的上下文中测试).

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);
    py=paintText(g2d,true );
    py+=line;

    py=paintText(g2d,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF,RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT,RenderingHints.VALUE_TEXT_ANTIALIAS_ON,RenderingHints.VALUE_TEXT_ANTIALIAS_GASP,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB,false);
    py+=line;

    py=paintText(g2d,true );
    py=paintText(g2d,true );
    py+=line;
    }

private int paintText(Graphics2D g2d,int py,Object val,boolean aa) {
    Graphics2D                          dgc=g2d;
    char[]                              txt=("The quick brown fox jumped over the lazy dog ("+val+",General AA: "+aa+")").tochararray();
    Image                               img=null;

    GraphicsConfiguration cfg=getGraphicsConfiguration();
    img=cfg.createCompatibleImage(getWidth(),line);
    dgc=(Graphics2D)img.getGraphics();
    dgc.setColor(getBackground());
    dgc.fillRect(0,getWidth(),line);
    dgc.setColor(g2d.getColor());

    if(aa       ) { dgc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON ); }
    else          { dgc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF); }
    if(val!=null) { dgc.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,val); }
    dgc.setFont(font);

    dgc.drawChars(txt,txt.length,10,line-5);
    g2d.drawImage(img,null);

    dgc.dispose();
    img.flush();

    return (py+line);
    }

public static void main(String[] args) {
    Frame                               wnd=new Frame("AWT Antialiased Text Sample");

    wnd.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
            }
        });
    wnd.add(new AwtTestFrame1b());
    wnd.setSize(new Dimension(1000,600));
    wnd.setVisible(true);
    }

}

解决方法

AWT Desktop Properties是否有任何帮助?特别是,“awt.font.desktophints” – 这些包含本机组件使用的AA提示,但可以应用于任何您想要的Graphics2D.

刚刚在黑暗中射击,最近读过肮脏的富客户的AA部分.

使用会像这样:

String str = "A quick brown fox jumps over the lazy dog";
Toolkit tk = Toolkit.getDefaultToolkit();
Map desktopHints = (Map)(tk.getDesktopProperty("awt.font.desktophints"));
Graphics2D g2d = (Graphics2D)g;

if(desktopHints != null) {
    g2d.addRenderingHints(desktopHints);
}

g2d.drawString(str,someX,someY);

我可以得到相同的结果(使用您的示例类和drawChars和drawImage,简单地键入drawString)作为LCD HRGB模式使用这些提示,在我的机器上没有其他调用.

我不知道这需要什么版本的Java,如果它是你正在寻找…

Java字体渲染的更多相关文章

  1. ios – 可以使UITextField和UITextView渲染字体相同,还是只是不同?

    如果我创建一个UILabel,一个UITextField和一个UITextView,然后将它们设置为具有相同的布局样式–例如,没有背景颜色,白色文本和Courier字体大小为18–UILabel和UITextField看起来是一样的,而UITextView看起来不一样–字体看起来更细.我拍了一个问题的屏幕截图,但我没有足够的声誉把它放在这里.所以clickheretoseemyexampleina

  2. android – 古吉拉特语字体渲染

    我有包含古吉拉特语的sqlite数据库..数据库的SQL查询是……我想在textview中显示文本..但它没有正确呈现..意味着它显示古吉拉特语中的单词“”将显示为“”.我已经使用过Typeface和不同的ttf字体.解决方法这意味着您的UI框架正在正确处理“复杂文本布局”,或者未正确配置以正确处理.梵文脚本需要不同的上下文形状和文本排序,这需要使用Unicode字符的复杂布局支持.见this一个论坛here提到Android仍然没有适当的支持来做到这一点.但我对此的信息有限.DIPAN.

  3. macos – Windows上的Mac字体渲染

    我喜欢MacOS精美呈现字体的方式.我想知道我们是否能以某种方式在Windows上运行的浏览器中获得相同的渲染?有人推荐sIFR,但我想这在我需要使用非标准字体时很有用吗?查看GDI/FreeType.它是Windows的高度可配置的字体渲染替代品.通过一些配置的提示,消除锯齿等,你应该能够近似地接近OSX风格的字体渲染.

  4. 在Windows上Chrome的非标准字体渲染不佳

    更新:样品图像:我已经看到Chrome有抗锯齿问题,这就是为什么它是jaggy.使用字体也与系统中使用本地字体有所不同.所以我们可以做的只是等到他们解决这个问题,或者帮助Chromium项目,如果可以的话.

  5. 在Windows下Emacs糟糕的字体渲染

    经过一些谷歌搜索我发现,人们推荐使用字体Inconsolata进行Emacs编程.我从这里在Windows和Linux上安装它:http://www.levien.com/type/myfonts/inconsolata.html以下是相同文本的屏幕截图1–Linux,2–WindowsXPSP3:在Windows下,字体很薄,不清晰,阅读不舒服.是否可以在Linux上进行渲染?下载并安装Inco

  6. Windows – QT5字体渲染在各种平台上不同

    换句话说,是否可能强制QT5在所有平台上使用相同的字体引擎?这是新的结果.白色刻度表示真正的10像素大小.以下G_G下面的回答我调整了代码(Linux?

  7. Java字体渲染

    我一直在尝试增强使用Java编写的GUI系统以使用子像素抗锯齿功能,并且已经成功,除了两个剩余的异常.这是跟随我的otherquestionfromafewweeksago.第一个问题是设置渲染提示KEY_ANTIALIASING为VALUE_ANTIALIAS_ON会导致KEY_TEXT_ANTIALIASING被设置为LCD(子像素)AA值时被忽略.任何人都可以看出这一点吗?目前,在渲染文本之

  8. Objective-C – iOS5字体渲染已经改变了?

    ).解决方法当在iOS5上使用fontWithName:size:时,字体名称参数需要是应用程序包中的字体文件的全名,而不仅仅是字体系列名称.

  9. html5 – 如何在CSS 3中更平滑地渲染薄字体?

    当我在AdobeFlashProCS6中设计我的网站时,字体看起来像这样:字体看起来平滑和稍厚,当我创建HTML和CSS在浏览器中渲染字体时,它分别出现在IE,Firefox和Chrome中。它在一些地区看起来更薄和像素化。我假设这是ClearType的问题,它看起来像这样的薄字体可怕。使用IE的用户不会切换到Firefox或Chrome,反之亦然。你可以使用“hacks”,但这只会膨胀你的CSS,因为你可能需要不同的修补程序不同的浏览器。你可以尝试的事情:编辑:DirectWrite现在在Chrome的

  10. Quick cocos2dx-LuaV3.3R1学习笔记(3)----文本渲染之用BM TTF创建文本

    要是我工具有很多字但是游戏里面所有字也不能都是这样显示啊,用工具做那么多字,多累啊,下面我们用ttf字体显示我们想要显示的文字二,显示TTF格式字体好的,这个就很简单了,直接贴代码本来还以为显示中文会乱码的,结果没有乱码,中文正常显示好的,要是乱码的话,就写到xml/json文件里面读取显示,既然我没乱码,就不写这一段了

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部