Эквивалентное появление шрифта в c # и Java - PullRequest
2 голосов
/ 03 июля 2011

Мне нужно эмулировать рисование шрифта С # на Java.Результат:

    Graphics g =this.CreateGraphics();
    Font f = new Font("Courier New", 24, FontStyle.Regular, GraphicsUnit.Document);
    g.FillRectangle(new SolidBrush(Color.White),0,0,400,400 );
    g.DrawLine(new Pen(Color.Black), 0, 100, 200, 100);
    g.DrawString("Hey go!", f, new SolidBrush(Color.Black), 0, 100);

Я пересчитал размер шрифта, но шрифт Java выглядит немного неоправданным.

            Font f = new Font("Courier New", Font.PLAIN, 24 * 120 / 300).deriveFont((float) (24 * 120. / 300.));
            FontRenderContext fontRenderContext = new FontRenderContext(null, false, true);
            TextLayout textLayout = new TextLayout("Hey go!", f, fontRenderContext);
            Graphics graphics = contentPane.getGraphics();
            graphics.setColor(new Color(255, 255, 255));
            graphics.fillRect(0, 0, 400, 400);
            graphics.setColor(new Color(0, 0, 0));
            graphics.drawLine(0, 100, 200, 100);
            graphics.setFont(f);
            Color c = new Color(0, 0, 0);
            graphics.setColor(c);
            textLayout.draw((Graphics2D) graphics, 0, 100);

Можно ли что-то сделать, чтобы вывод выглядел одинаково?PS: я обновил код, так как нашел ошибку.Щелкните правой кнопкой мыши изображения, чтобы увидеть их попиксельно в вашем браузере.

1 Ответ

1 голос
/ 03 июля 2011

Просто вы дважды визуализируете текст с небольшими отличиями.

textLayout.draw((Graphics2D) graphics, 0, 100);
graphics.drawString("Hey go!", 0, 100);

При первом использовании TextLayout и во второй раз непосредственно рисуете строку.TextLayout использует fractionalMetrics, как указано последним параметром в конструкторе, а метод drawString - нет.

Поэтому вы рисуете строку два раза с разными настройками, и в результате получается, что строкапоказывает эту слабую тень.

Удалите второй вызов drawString, выберите, нравится ли вам fractionalMetrics или нет, и все будет в порядке.

Example

...