Domanda

Sono stato cercando di migliorare il mio sistema GUI scritto in Java da utilizzare subpixel antialiasing e hanno avuto successo, tranne che per un'anomalia rimanente. Si tratta di un seguito a mia altra domanda da ieri .

Il problema che rimane è che modificando indizi di rendering KEY_ANTIALIASING a VALUE_ANTIALIAS_ON provoca KEY_TEXT_ANTIALIASING essere ignorato quando è impostata su un valore AA LCD (subpixel). Qualcuno può fare luce su questo? Attualmente sono costretto a VALUE_ANTIALIAS_OFF prima del rendering del testo e riaccenderlo dopo il rendering del testo (in modo che altri la pittura, come i cerchi, ecc, è AA'd).

Il problema è dimostrato dal programma di test self-contained in basso. Come si può vedere se lo si esegue, il cerchio è dipinto con AA quando il carattere non è, e viceversa. Sarebbe bello avere AA preconfigurato a lavorare per tutta la pittura.


autonomo programma di test

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);
    }

}
È stato utile?

Soluzione

Un po 'di rovistando pensano che questa: bug 6.263.951 .

A quanto pare il bustage è fissato in b17? Io non sono esattamente sicuro di come interpretare la segnalazione di bug.

definitivamente rotto qui in 1.6.0_17-b04 (MacOS X 10.5).

Altri suggerimenti

Stavo aggiornando VirtualBox , così ho preso le immagini. Posso essere solo vedendo il rendering del padrone di casa, ma ho il sospetto è anche a carico di attuazione.

AwtTestFrame Ubuntu Mac OS X 10.5 AwtTestFrame Mac Windows 7  AwtTestFrame WIN

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top