Como manipular imagem BMP?

Galera, como eu posso manipular uma imagem BMP? Inserir texto nela, ou algum outro desenhor, etc. Abraços.

A API Java2D suporta leitura/escrita em BMP desde a JSE 5.

Ola, obrigado pela resposta. Vc teria algum exemplo simples, de como inserir texto em uma imagem bmp por exemplo? Vlw

O GUJ tem um tutorial falando como criar imagens… pra salvar é só usar a classe ImageIO.

import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;

public class Java2DTest {

	public void write(final String filename, final BufferedImage image) {
		final File file = new File(filename);
		try {
			final FileOutputStream output = new FileOutputStream(file);
			ImageIO.write(image, "bmp", output);
		} catch (final Exception e) {
			e.printStackTrace();
		}
	}

	public BufferedImage createImage(final int width, final int height) {

		final BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);

		final Graphics2D graphics = image.createGraphics();

		for (int i = 1; i <= width / 2; i++)
			graphics.draw(new Ellipse2D.Double(width / i, height / i, width,
					height));

		graphics.drawString("GUJ", width / 2, height / 2);

		return image;
	}

	public static void main(final String[] args) {
		final Java2DTest test = new Java2DTest();
		final BufferedImage image = test.createImage(500, 500);
		test.write("D:\\test.bmp", image);
	}
}

Vlw amigo, desculpe, pois nao tinha visto o artigo.

Amigo, me surgiu uma duvida aqui, como faço para escreve uma string de cima pra baixo, girada 90 graus. Pq o drawString so imprime de forma normal. Vlw mano.

Dá pra fazer assim:

graphics.rotate(Math.toRadians(90));
graphics.drawString("GUJ", width / 2, - height / 2);

Mas acho que não é isso que vc quer, é? Se for pra escrever tipo

Acho que vc vai ter que fazer na mão mesmo… dá uma olhada no Graphics2D#setTransform(AffineTransform), nunca usei e não sei se serve pra isso, mas quem sabe…

Eu ahco que pra escrever estilo

Voce vai ter que usar o FontMetrics medir o tamanho da letra e desenhar cada uma em um for adicionando o tamanho da letra anterior a posição atual.

[quote=MarceloS]Dá pra fazer assim:

graphics.rotate(Math.toRadians(90));
graphics.drawString("GUJ", width / 2, - height / 2);

Mas acho que não é isso que vc quer, é? Se for pra escrever tipo

Acho que vc vai ter que fazer na mão mesmo… dá uma olhada no Graphics2D#setTransform(AffineTransform), nunca usei e não sei se serve pra isso, mas quem sabe…[/quote]

Nao amigo, acho que eh da forma como vc falou mesmo, eu nao quero

G
U
J

Nao, eu quero que rotacione a string mesmo, so que nao consigo demonstrar aqui ehhe, mais acredito que seja isso que vc colocou, vou da uma testada aqui. Vlw:)

[quote=mizael86]

Nao, eu quero que rotacione a string mesmo, so que nao consigo demonstrar aqui ehhe, mais acredito que seja isso que vc colocou, vou da uma testada aqui. Vlw:)[/quote]

Se achar a resposta posta aí, também fiquei curioso… :roll:

Opa!

Bom, eu não sei fazer isso, mas você não pode girar a imagem, escrever nela rotacionada, salvar a imagem e girar a imagem novamente?

Acho que isso é gambi, mas não vejo outro jeito.

Abraço.

Usei o exemplo do MarceloS e funcionou sem problemas :smiley:
Só que ele gera um BMP de 24 bits (16 milhões de cores). No entanto, preciso gerar um BMP de 4bits (16 cores) alguém sabe como? Estive olhando as seguintes classes:

BMPConstants bmpc; BMPMetadata bmpm = new BMPMetadata(); BMPImageWriteParam bmpwp = new BMPImageWriteParam(); BMPMetadataFormatResources bmpmfr = new BMPMetadataFormatResources(); BMPMetadataFormat bmpmf; BMPImageWriterSpi bmpws = new BMPImageWriterSpi(); BMPImageWriter bmpw = new BMPImageWriter(bmpws); BMPImageReaderSpi bmprs = new BMPImageReaderSpi(); BMPImageReader bmpr = new BMPImageReader(bmprs);
Mas não achei nada relativo a Color Depth ou BIT Depth em nenhuma delas.
Alguém tem alguma dica?

Abraço