Transparencia em tempo de execução com j2me

Galera do GUJ, boa tarde.

Preciso colocar uma imagem sobre outra em um canvas, sendo a debaixo uma imagem de fundo, e a de cima é uma criada em tempo de execução (Um circulo por exemplo).

[i]
Como eu faço para deixar envolta do circulo transparente?

> Crio a imagem já transparente?
> Desenho tudo e depois seto uma cor especifica como transparente?

Em ambos os casos, como faço isso?
[/i]

Aguardo a ajuda galera,
Ricoldi

[quote=ricoldi]Galera do GUJ, boa tarde.

Preciso colocar uma imagem sobre outra em um canvas, sendo a debaixo uma imagem de fundo, e a de cima é uma criada em tempo de execução (Um circulo por exemplo).

[i]
Como eu faço para deixar envolta do circulo transparente?

> Crio a imagem já transparente?
> Desenho tudo e depois seto uma cor especifica como transparente?

Em ambos os casos, como faço isso?
[/i]

Aguardo a ajuda galera,
Ricoldi

[/quote]

Pode fazer ambos. Para criar a imagem já transparente é simples, faça o circulo em algum editor de imagens como, por exemplo, o Fireworks. Deixe em volta do circulo transparente e exporte a imagem com transparência… depois é só mandar exibir ela por cima da imagem de fundo que ficará transparente normalmente.

No outro caso você pode pegar a imagem e mandar transformar uma determinada cor como transparente. Isso é possível usando um algoritmo como o seguinte:

private Image setTransparent(Image img, int porcentagem) {
        int larg = img.getWidth();
        int alt = img.getHeight();

        int[] rgb = new int[larg * alt];

        img.getRGB(rgb, 0, larg, 0, 0, larg, alt);

        for (int i = 0; i < rgb.length; i++)
            rgb[i] = (((porcentagem * ((rgb[i] & 0xFF000000) >>> 24)) / 100) * 0x1000000) + (rgb[i] & 0x00FFFFFF);

        return Image.createRGBImage(rgb, larg, alt, true);
}

No algoritmo acima toda a imagem ficará transparente, na porcentagem que você quiser. Mas, você pode colocar um if dentro do for para ele só colocar transparente uma determinada cor.

OBS:Esse algoritmo consome bastante procesador e memória.

Fala JavaES, bom dia!

Esse código que você postou eu ja vi, o problema é que depois de passar por este código (createRGBImage), a imagem fica imutável e eu não posso pegar o Graphics dela para desenhar sobre isso.
Então fiz a segunda opção, crio a imagem com uma cor de fundo (255,0,255) e depois desenho tudo que eu quero usando outros tons. Feito isso eu aplico esse código seu com um alteração:

        for (int i = 0; i < rgb.length; i++) {

            if (rgb[i] == corhide) { //Aqui eu aplico opacidade de 0 apenas na cor (255,0,255)
                rgb[i] = (((opacidade * ((rgb[i] & 0xFF000000) >>> 24)) / 100) * 0X1000000) + (rgb[i] & 0X00FFFFFF);
            }
        }

Com esse código eu consigo uma imagem gerada em tempo de execução e com fundo transparente (Porem imutável, mas deste jeito não chega a ser um problema), mas eu não sei como posso resolver um problema que esse código tem que é o (Anti-aliasing) ou seja bordas que mesclam cores para atenuar bordas, assim as bordas ficam meio falhadas (Com bordas em cor [255,0,255]), teria que ter um if (Ou algum processamento de imagem) que consiga captar e fazer uma borda totalmente opaca (Compreende?)

Então cara, criar imagem transparente fora do j2me eu sei, (Uso o GIMP), o que eu queria saber é, se em tempo de execução eu consigo fazer uma imagem transparente.

tipo:

        imagem_buffer = Image.createImage(largura, altura);
        Graphics mg = imagem_buffer.getGraphics();
        mg.setColor(Imagem.TRANSPARENCIA_PADRAO); //Que valor eu colocaria aqui para fazer um retangulo transparente
        mg.fillRect(0, 0, largura, altura);                                //Aqui eu pinto toda a area da imagem com essa cor "Transparente"

        mg.setColor(255,255,255);
        mg.fillArc(10, 10, largura-10, altura-10, 5, 5);           //Desenho um Arco branco sobre o fundo transparente

Com isso eu teria uma imagem criada em tempo de execução e com fundo transparente, entendeu meu problema?

Agradeço o tempo e conto com a ajuda,
Ricoldi

Entendi… aí fica meio complicado mesmo, tem que pesquisa para ver se existe algum algoritmo para tratar o antialising, deve existir. Assim que puder vou vfazer uma pesquisa de soluções para isso, fiquei curioso tb.

Ficaria muito grato se me ajudasse, pois procurei e não encontrei nada sobre isso.

Agradeço
Ricoldi