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?
[code]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;
}
}[/code]
Por favor mandem sugestões.
Tem alguns problemas no seu código.
- Para que você estende de JPanel?
- Por que está renderizando tantas vezes, se você deseja retornar apenas 1 delas?
- Seu objeto faceFonte está nulo. Ele deve ser obtido da BufferedImage;
- 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();
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…
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
Valeu leandrolw, deu certo consegui pegar suas dicas e adaptar para o meu programa.