Wie kann ich die Anti-Alias-Einstellung des Systems zum Malen von Text zu Off-Screen-Bildern wie Swing erben?Java

Java-Forum
Anonymous
 Wie kann ich die Anti-Alias-Einstellung des Systems zum Malen von Text zu Off-Screen-Bildern wie Swing erben?

Post by Anonymous »

Wenn ich meine Swing-GUI-Anwendungen unter Java 6 ausführe, verwenden sie automatisch meine konfigurierten Subpixel-Anti-Alias-Einstellungen für alle Schriftarten. Das Ergebnis ist gegenüber Standard -AA -Optionen erheblich verbessert. Der Versuch, mit den verschiedenen AA-Hinweisen von Java herumzuspielen, ist eine verlorene Ursache, da für alle Benutzer keine Subpixelmethode funktioniert. Im Moment muss ich nach Keuchen AA verwenden, um die schrecklichen Ergebnisse zu vermeiden, die Standard AA mit kleinen Schriftarten liefert. Ich habe versucht, nichts für Text AA festzulegen und überhaupt keine AA -Hinweise festzulegen. < /p>



Update 2010-01-05 < /strong> < /p>

Ich denke, ich habe das festgehalten. Das Subpixel AA -Hinweise scheint nur beim Malen direkt in den AWT -Grafikkontext zu respektieren. Wenn ich ein Doppelpufferbild male, macht es einfach Standard AA; Aber wenn ich das Doppelpufferbild umgeht, ist das Subpixel AA fertig. Beachten Sie, dass die Antwort von The_Fire nicht mit einer AWT -Komponente funktioniert (mit New Label () anstelle von neuer jLabel () fehlschlägt), vermutlich, da der FontrenderContext nicht extrahiert werden kann, wenn die Komponente auf das Display realisiert wird. />

Code: Select all

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 platform/impl default
dbGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
// try to override platform/impl AA with font-specified AA (Java 6+)
try { dbGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.class.getField("VALUE_TEXT_ANTIALIAS_GASP").get(null)); } catch(Throwable thr) {;} // yes, ignore exception
}
catch(Throwable thr) {
dctRoot.log.println("Antialiasing not supported on this JVM ("+thr+").");
dctRoot.setProperty("Antialias","False");           // turn off AA for subsequent painting
}
}
}
}
catch(Throwable thr) {
dbImage=null;
dbGraphics=null;
}
< /code>

Der Code zum Erstellen des Bildes verwendet eine zugrunde liegende AWT -Komponente, die den Hintergrund bildet, auf dem ich mein gesamtes Gemälde mache - die Komponente ist ein Panel, da ich in der Lage sein muss, ein Setfocuscycleroot durchzuführen, damit es mit anderen AWT -Komponenten gut abgespielt wird.  Der Bildcode erstellen folgt: < /p>

public DctImage createImage(int wid, int hgt, float accpty) {
GraphicsConfiguration               cfg=awtComponent.getGraphicsConfiguration();
Image                               img=null;

if(transparentImages) {
//y { img=new BufferedImage(wid,hgt,BufferedImage.TYPE_INT_ARGB); }     // NB: J2ME CDC/PP 1.1 does not have the BufferedImage constructors (one day I may discover a way to create a BufferedImage via another API!!)
try { img=cfg.createCompatibleImage(wid,hgt,Transparency.TRANSLUCENT); }// NB: J2ME CDC/PP 1.1 does not have this API, but prefer to use GraphicsConfiguration over new BufferImage(...)
catch(NoClassDefFoundError   thr) { transparentImages=false; createImage(wid,hgt,accpty); } // try again with transparency disabled
catch(NoSuchMethodError      thr) { transparentImages=false; createImage(wid,hgt,accpty); } // try again with transparency disabled
catch(NoSuchFieldError       thr) { transparentImages=false; createImage(wid,hgt,accpty); } // try again with transparency disabled
}
else {
img=cfg.createCompatibleImage(wid,hgt);
}

if(accpty>0 && SET_ACCELERATION_PRIORITY!=null) {
try { SET_ACCELERATION_PRIORITY.invoke(img,new Object[]{new Float(accpty)}); } catch(Throwable thr) {;}
}

return (img==null ? null : new DctImage(img));
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post