Montar uma imagem

4 respostas
R

Estou montando uma classe que pega um string para converter em uma imagem. Só que não consigo passar os pixels para a imagem, travei na createImage. Como faço para passar os parametros do pixels para essa imagem?

class ComparaFonte extends JPanel{
    
    public BufferedImage caracter;
    public String teclado;
    TextLayout layout;
    FontRenderContext frc;
    Font fonte;
    Graphics faceFonte;
    String listaFontes[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames( );
   
    public Image montaFonte(String letra) {
        Image imagemLetra = null;
        
        for (int f=0; f < listaFontes.length; f++){
            fonte = new Font(listaFontes[f], Font.PLAIN, 12);
            faceFonte.setColor(Color.BLACK);
            faceFonte.drawString(teclado,0,0);
            fonte=faceFonte.getFont();
            FontMetrics metrics = faceFonte.getFontMetrics();
            int heightFonte = metrics.getHeight();
            int widthFonte = metrics.getMaxAdvance();
            imagemLetra = createImage(widthFonte, heightFonte);
            
       }  
       return imagemLetra;
    }
}

Por favor mandem sugestões.

4 Respostas

ViniGodoy

Tem alguns problemas no seu código.

  1. Para que você estende de JPanel?
  2. Por que está renderizando tantas vezes, se você deseja retornar apenas 1 delas?
  3. Seu objeto faceFonte está nulo. Ele deve ser obtido da BufferedImage;
  4. Você não está usando as FontMetrics corretas.

Para criar e escrever sobre uma imagem, faça:

BufferedImage img = new BufferedImage(width, heigth, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = (Graphics2D) img.createGraphics(); //Seu código de pintura aqui g2d.dispose();

L

Ola, ve se isso te ajuda… um código exemplo…

public static void main(String... args) throws FileNotFoundException, IOException {
        String listaFontes[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        int sizeFont = 20;
        int width = 400;
        int height = listaFontes.length * sizeFont;
        BufferedImage imagem = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = imagem.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);

        int posInicial = 0;
        for (String font : listaFontes) {
            posInicial += sizeFont;
            g.setColor(Color.BLACK);
            g.setFont(new Font(font, Font.PLAIN, sizeFont));
            g.drawString(font, 1, posInicial);

        }
        g.dispose();

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(new FileOutputStream("Teste.jpg"));
        encoder.encode(imagem);
    }

Este código gera um arquivo com os nomes da fonte no formato de imagem…

igor_jua

Estou com um problema semelhante só que o não consigo ter controle sob o tamanho da imagem que eu gero.
http://www.guj.com.br/posts/list/132292.java#712146

R

Valeu leandrolw, deu certo consegui pegar suas dicas e adaptar para o meu programa.

Criado 13 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 4
Participantes 4