Java2D-Grafik mit anti-Aliasing
Ich bin neu in Java und versuche zu verwenden Java2D-Grafik zu erstellen, ein Bild. Aber die Ausgabe kommt als anti-Aliasing. Ich habe versucht, viele Möglichkeiten, um zu beheben, es funktioniert aber nicht. Die Charaktere sind immer verzerrt oder unsauber.
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 messageHeight = fm.getHeight() - fm.getDescent();
for (char ch : label.toCharArray()) {
messageWidth += fm.charWidth(ch);
}
bi = bi.getSubimage(50, 0, messageWidth + 10, fm.getHeight());
Graphics g = bi.getGraphics();
g.setColor(Color.black);
AttributedString as = new AttributedString(label);
as.addAttribute(TextAttribute.FONT, font);
g.drawString(as.getIterator(), 5, messageHeight);
g2d.dispose();
g.dispose();
return bi;
}
Kann bitte jemand mir helfen, den Fehler zu verbessern?
Was werden Sie erstellen ein 10x10 Bild zuerst? Dein code ist wirklich verworren, was er tun soll.
Ich bin mir nicht komplett sicher, ob ich verstehe. Von yor Frage, ich verstehe Sie nicht wollen, dass die Zeichen geglättet. Aber Lesen Sie den code, es ist kein Wunder, da heißt es ANTIALIAS_ON überall. Könnten Sie das erklären?
Dank für die Angabe, dass - getestet habe ich den code mit ANTIALIAS_OFF aber es gibt einige Zeichen, die noch kommt, da anti-Aliasing (nicht alle Zeichen) wie der vertikalen '\' N, 'a', 'v', 'e', y' , 'o' - im Grunde die Ränder der Zeichen sind nicht glatt. Gibt es etwas, was ich tun?
Auch, wie unten erwähnt - Meine Forderung ist, schreiben Sie eine Funktion zurückgibt, die ein BufferedImage, enthält einen text der Muster "rette Mich <User-Adresse>". Der Satz "rette Mich" sollte in schwarzer Farbe, während "<User-Adresse>", die gesammelt, innerhalb der Durchfluss soll in der Farbe blau. Können Sie bitte einige Eingänge auf dem gleichen?
Ich bin mir nicht komplett sicher, ob ich verstehe. Von yor Frage, ich verstehe Sie nicht wollen, dass die Zeichen geglättet. Aber Lesen Sie den code, es ist kein Wunder, da heißt es ANTIALIAS_ON überall. Könnten Sie das erklären?
Dank für die Angabe, dass - getestet habe ich den code mit ANTIALIAS_OFF aber es gibt einige Zeichen, die noch kommt, da anti-Aliasing (nicht alle Zeichen) wie der vertikalen '\' N, 'a', 'v', 'e', y' , 'o' - im Grunde die Ränder der Zeichen sind nicht glatt. Gibt es etwas, was ich tun?
Auch, wie unten erwähnt - Meine Forderung ist, schreiben Sie eine Funktion zurückgibt, die ein BufferedImage, enthält einen text der Muster "rette Mich <User-Adresse>". Der Satz "rette Mich" sollte in schwarzer Farbe, während "<User-Adresse>", die gesammelt, innerhalb der Durchfluss soll in der Farbe blau. Können Sie bitte einige Eingänge auf dem gleichen?
InformationsquelleAutor Prakash | 2010-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie wollen wirklich glatt (non-Aliasing) text,
TextLayout
die dies erleichtern können. DieFontRenderContext
Konstruktor kann für die Verwaltung der anti-aliasing-und Bruch-Metrik-Einstellungen.Nachtrag: Mit
g2d.setColor(Color.blue)
scheint zu produzieren, die den erwarteten Effekt.Nachtrag: unter Mac OS X, die
Pixie
Anwendung in/Developer/Applications/Graphics Tools/
ist bequem für die Prüfung der anti-Aliasing-Pixel. Auf anderen Plattformen,Zoom
verwendet werden können.Auch vergaß hinzuzufügen, dass, da es auf eine Taste, Bild-Größe werden von bestimmten Breite und Höhe. Ich habe versucht, das Beispiel-Programm, aber das Bild gerendert ist komplett schwarz und war nicht in der Lage zu sehen, die den text geschrieben. Bitte beachten Sie, dass ich bin völlig neu in Java.
Nur hinzufügen - ich habe das Bild aber eigentlich brauche ich zum speichern und anzeigen der gleiche wie innerhalb einer Datei. Also, wie kann ich schreiben das was angezeigt wird, über display () - Methode in eine Datei.
Ich würde verwenden
ImageIO.write()
zum speichern derBufferedImage
. Sie können rufen SiesetColor()
Bedarf für jede Zeile.Danke, aber die setColor () - Methode ist die Einstellung der vollständige image grün nicht die Farbe des Textes. Ich brauche den text zu drucken in Schwarz und Hintergrundfarbe weiß / Grau.
InformationsquelleAutor trashgod
Als Traroth erwähnt es ist mehr als wahrscheinlich aufgrund
Stattdessen sollte dies
Sie scheinen nicht zu verstehen, was anti-aliasing bedeutet. Anti-Aliasing=glatt.
InformationsquelleAutor Jim
Fand ich, dass nur diese Zeile funktioniert der trick:
Nach, dass, nutzen Sie einfach drawString().
InformationsquelleAutor Stefan Reich