Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7023759

Text 'gray' antialiasing with fractional metrics regression

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 7
    • client-libs
    • 2d
    • x86
    • windows_vista

      FULL PRODUCT VERSION :
      java version "1.7.0-ea"
      Java(TM) SE Runtime Environment (build 1.7.0-ea-b131)
      Java HotSpot(TM) Client VM (build 21.0-b02, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Windows Vista 32 bit

      A DESCRIPTION OF THE PROBLEM :
      Text is antialised badly with these rendering hints:
      RenderingHints.KEY_TEXT_ANTIALIASING:
      RenderingHints.VALUE_TEXT_ANTIALIAS_ON
      and
      RenderingHints.KEY_FRACTIONALMETRICS:
      RenderingHints.VALUE_FRACTIONALMETRICS_ON

      See this comparison with JRE 1.6.0:
      http://magicplot.com/jdk7-text-aa.png
      - Font with size 10-15 are bad antialized in Java 1.7, the font typeface cannot be seen at all.
      - The strange for users difference in 'bold' between sizes 17 and 18.

      REGRESSION. Last worked in version 6

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the little test below or use this test app:
      http://magicplot.com/MPTextTest.jar
      http://magicplot.com/MagicPlotTextTest.java

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Text antialising similar to 1.6.0 for this options is expected.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.Color;
      import java.awt.Dimension;
      import java.awt.Font;
      import java.awt.Graphics;
      import java.awt.Graphics2D;
      import java.awt.HeadlessException;
      import java.awt.RenderingHints;
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.SwingUtilities;

      public class FontTextMini extends JFrame
      {
        public FontTextMini() throws HeadlessException
        {
          setDefaultCloseOperation(EXIT_ON_CLOSE);

          JPanel textPanel = new JPanel()
          {
            @Override
            protected void paintComponent(Graphics g)
            {
              super.paintComponent(g);
              Graphics2D gr = (Graphics2D) g.create();

              Dimension size = getSize();
              gr.setColor(Color.white);
              gr.fillRect(0, 0, size.width, size.height);
              String text = "The quick brown fox jumps over the lazy dog 1234567890";

              gr.setColor(Color.black);
              gr.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
              gr.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);

              int pos = 7;
              for (int fontSize = 4; fontSize <= 25; fontSize++)
              {
                gr.setFont(new Font("Times New Roman", Font.PLAIN, fontSize));
                gr.drawString(fontSize + " " + text, 5, pos);
                pos += fontSize;
              }

              gr.dispose();
            }
          };

          textPanel.setPreferredSize(new Dimension(650, 320));
          getContentPane().add(textPanel);
          pack();
          setSize(getPreferredSize());
        }

        public static void main(String[] args)
        {
          SwingUtilities.invokeLater(new Runnable()
          {
            @Override
            public void run()
            {
              JFrame frame = new FontTextMini();
              frame.setVisible(true);
            }
          });
        }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Using of VALUE_TEXT_ANTIALIAS_LCD_HRGB may solve the problem for some applications. But if you need only 'gray' antialiasing no workaround has been found.

            prr Philip Race
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: