Redimensionar Imagem / Fonte distorcida [resolvido]

Olá Pessoal,

Preciso de uma Ajuda Urgente, peço-lhes uma mão codificadora aí…

Seguinte, estou precisando gerar uma imagem com um código de barras, a partir de uma fonte que me foi fornecida.

Criei o seguinte método:

	private BufferedImage getBarras(String barCode, String fontName, float fontSize) throws Exception {
		// ajuste da fonte no windows
		int screenRes = Toolkit.getDefaultToolkit().getScreenResolution();
		int fontSize = (int) Math.round(fontSize * screenRes / 72.0);
		Font font = new Font(fontName, Font.PLAIN, fontSize);

		// tamanho total da imagem, depois eu dou um trim na imagem para tirar os espaços em branco
		int w = 1000;
		int h = 1000;

		// nova imagem
		BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2d = img.createGraphics();

		// fundo branco
		g2d.setColor(Color.WHITE);
		g2d.fillRect(0, 0, w, h);

		// retirando smoothing e antialias da fonte
		RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
		renderHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
		renderHints.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
		g2d.setRenderingHints(renderHints);
		
		// cor preta e fonte
 		AttributedString as = new AttributedString(barCode);
		as.addAttribute(TextAttribute.FONT, font);
		as.addAttribute(TextAttribute.FOREGROUND, Color.BLACK, 0, barCode.length());
		as.addAttribute(TextAttribute.BACKGROUND, Color.WHITE, 0, barCode.length());

		// desenha a string na imagem
		g2d.drawString(as.getIterator(), 5, h);
		g2d.dispose();
		
		return img;
	}

Beleza, o método funciona…
Porém se eu usar o tamanho de fonte diferente de 72, fica distorcido…
Já montei vaaaaarios outros métodos utilizando outras formas pra montar esse codigo de barras, mas nao tive sucesso. todas distorcem alguma coisa… os espaços em branco e as barras pretas, ficam com tamanhos diferentes, e os leitores de barras acabam nao lendo…

De qualquer forma, estou tentando outra abordagem, estou gerando o codigo de barras com tamanho maximo (72). E com isso a barra é gerada com sucesso… tudo certinho…

Porem preciso de uma barra menor, entao criei outro metodo para redimensionar… na verdade varios outros metodos…rs… mas nao estou conseguindo fazer com q a imagem seja redimensionada proporcionalmente, horas as barras ficam com espaços a mais do q deveriam.

Por exemplo, esta é a imagem com tamanho 72. Ela fica com os espaços corretos:

Agora esta é a imagem gerada com fonte 32. Notem que as barras já ficaram com espaçamentos incorretos. Dá pra notar q as 3 ultimas barras tem quase o mesmo tamanho, bem diferente da imagem maior de 72p.

E esta é a imagem grande, redimensionada… as barras pretas ficaram corretas, mas os espaços em branco ficaram errados…

Entre outros, fiz este método para redimensionar a imagem, e este não está perdendo a resolução… é o melhor q consegui…

	public BufferedImage scale(BufferedImage img, float scala) throws Exception {
		ParameterBlock pb = new ParameterBlock();
		pb.addSource(img);
		pb.add(scala);
		pb.add(scala);

		PlanarImage planar = JAI.create("scale", pb, null).getRendering();
		ColorModel cm = PlanarImage.createColorModel(planar.getSampleModel());

		return planar.getAsBufferedImage(planar.getBounds(), cm);
	}

Bom, peço-lhes ajuda pra resolver esse meu problema… já estou uma semana queimando os neuronios com isso…

Agora pergunto… onde estou errando?
Como gerar a imagem com o tamanho certo da fonte?
Ou como redimensionar a imagem sem perder o espaço das barras brancas…
Qualquer solução me serve… por favor me ajudem…

Obrigado,
DaC

Não é por nada não, mas não seria possível desenhar as barras em vez de usar a fonte, já que você sabe trabalhar direitinho com Java2D?
Qual é a codificação usada (2 de 5 intercalado, código 39, código 128 etc.)?

[quote=entanglement]Não é por nada não, mas não seria possível desenhar as barras em vez de usar a fonte, já que você sabe trabalhar direitinho com Java2D?
Qual é a codificação usada (2 de 5 intercalado, código 39, código 128 etc.)?

[/quote]

É 2 de 5 Intercalado…

E essa pergunta eu repasso… É possível?

Pq eu já recebo um código já gerado para gerar a barra com a fonte…

Algo do tipo (GÝÎAD1ÕÅÃàÒNÊ100ÕO06S)

A partir desse codigo eu conseguiria gerar as barras “Code 2/5 Interleaved”???

Bom, nao foi a melhor solução, mas como jah dei muita cabeçada numa coisa soh, fiz uma classe pra ler o codigo de barras, e gerei ela denovo em java2d…

valeus.