Java/колебание: преобразование текстовой строки к Форме

Я хочу преобразовать некоторый произвольный текст в Форму (java.awt.Shape) и затем перечеркните/заполните Форму для рисования его. Как я могу сделать это?

11
задан Jason S 19 March 2010 в 13:55
поделиться

3 ответа

Хм, я не знал ответа на этот вопрос, но после того, как немного поигрался с помощником по содержанию Eclipse, я нашел то, что вам нужно :

РЕДАКТИРОВАТЬ: я изменил код, чтобы изменить способ отображения строки, поэтому вы спросили, о чем просили :) Попробуйте. Он отображает строку красным цветом и пунктирным контуром

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.GlyphVector;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JPanel{

    private Shape s;

    public Test() {
        Font f = getFont().deriveFont(Font.BOLD, 70);
        GlyphVector v = f.createGlyphVector(getFontMetrics(f).getFontRenderContext(), "Hello");
        s = v.getOutline();
        setPreferredSize(new Dimension(300,300));
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g.create();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.translate(100, 150);
        g2.rotate(0.4);
        g2.setPaint(Color.red);
        g2.fill(s);
    g2.setPaint(Color.black);
        g2.setStroke(new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[]{1,0.4f,1.5f}, 0));
        g2.draw(s);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        Component c = new Test();
        f.getContentPane().add(c);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }
}

Также обратите внимание, что вы можете получить отдельные символы из строки, вызвав:

getGlyphOutline(glyphIndex)
14
ответ дан 3 December 2019 в 06:20
поделиться

Используйте класс TextLayout (см. метод getOutline()). Пример здесь

5
ответ дан 3 December 2019 в 06:20
поделиться

Если я правильно вас понял, это не относится к вашему точному ответу, но это начало. ..

//Rough pseudo code
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.TexturePaint;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;



BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = (Graphics2D)image.getGraphics();

//Paint with texturing brush
Rectangle2D rect2D = new Rectangle2D.Double(0, 0, width, height);
graphics.setPaint(new TexturePaint(image, rect2D));
graphics.fill(rect2D);

//Draw text
graphics.drawString("my text goes here", xPos, yPos);

В итоге,

  1. Создайте объект BufferedImage с шириной и высотой и ImageType .
  2. Получить объект Графика изображения.
  3. Нарисуйте эту графику, как вам нравится (например, создайте прямоугольник, круг, текст и т. Д.)
  4. Запишите это изображение в поток (файл, ServletRequest и т. Д.)
0
ответ дан 3 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: