Javaのフォントのレンダリング:一般的なAAは本当にサブピクセルAAのためにオフにする必要がありますか?

StackOverflow https://stackoverflow.com/questions/2023579

質問

私は、サブピクセルアンチエイリアスを使用するには、Javaで書かれた私のGUIシステムを強化しようとしてきたし、残りの1つの異常を除いて、成功しています。これは昨日するから私の他の質問へのフォローされています。

残りの問題は、それがLCD(サブピクセル)AA値に設定されている場合VALUE_ANTIALIAS_ONにKEY_ANTIALIASING描画ヒントを設定することがKEY_TEXT_ANTIALIASINGは無視されていることです。誰もがこの上でいくつかの光を当てることができますか?現在、私はテキストをレンダリングする前にVALUE_ANTIALIAS_OFFに強制していますし、(他の絵は、円などのように、AA'dになるように)テキストのレンダリングした後、再びオンにします。

この問題は、以下の自己完結型のテストプログラムによって証明されています。あなたが見ることができるようにあなたがそれを実行した場合、円はフォントがないときにAAで塗装し、その逆です。すべての絵のために動作するように事前設定されたAAを持っていいだろう。

<時間>

自炊テストプログラム

import java.awt.*;
import java.awt.event.*;

public class AwtTestFrame1c extends Panel {

AwtTestFrame1c() {
    setBackground(SystemColor.control);
    }

public void paint(Graphics gc) {
    Graphics2D                          g2d = (Graphics2D)gc;
    int                                 py=0;

    py=paintText(g2d,py,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB,true );
    py=paintText(g2d,py,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB,false);
    }

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

    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.drawOval(5,py+5,15,15);
    dgc.drawChars(txt,0,txt.length,30,py+line-5);

    return (py+line);
    }

static private final Font                      font=new Font("SansSerif",Font.PLAIN,16);
static private final int                       line=25;

static public 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 AwtTestFrame1c());
    wnd.setSize(new Dimension(1000, 300));
    wnd.setVisible(true);
    }

}
役に立ちましたか?

解決

バグ6263951 に:

チャンスをうかがっのビットがこれを見つけました。

どうやらbustageはB17に固定されていますか?私は、バグレポートを解釈する方法を正確にはわかりません。

間違い1.6.0_17-B04(MacOS Xの10.5)にここで壊れています。

他のヒント

私は VirtualBoxのを更新しましたので、私は写真を撮りました。私は、ホストのレンダリングを見ることになるかもしれないが、私は、それはまた、実装依存である疑います。

Ubuntuの9.10 の マックOS X 10.5 の Windows 7の  AwtTestFrame WIN

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top