Como alterar a semi-transparência de uma imagem em J2ME
Mostrarei um código básico para deixar uma imagem transparente, respeitando a transparência já existente na imagem. Por exemplo, se eu aplicasse 50% a mais de transparência numa imagem, e esta imagem já tivesse pixels semi-transparentes com 50% de transparência, estes pixels ficariam 75% transparentes, enquanto que os outros pixels que não tinham transparência ficariam 50% transparentes.
Veja as duas imagens ao lado. A imagem PNG-24 da motocicleta está com transparência de 70%. Ocorre que ela já possuía pixels semi-transparentes em sua extremidade, e quando aplicamos a transparência de 70%, mesmo estes pixels que já eram trasnparentes ficaram 70% mais transparentes do que já eram.
Procurei bastante na internet por um método para fazer isso, mas não encontrei. O mais perto que cheguei foi de um método que deixava a imagem semi-transparente, mas não respeitava os pixels que já eram semi-transparentes. Isso não poderia ser usado numa imagem PNG-24 com pixels semi-transparentes.
O código é bem simples. Ele trabalha em cima do array ARGB da imagem. Veja:
public Image transparentImage(Image imgOriginal, int porcentagem) {
//Guarda a largura e altura da imagem
int largura = imgOriginal.getWidth();
int altura = imgOriginal.getHeight();
//Cria o vetor RGB da imagem destino, com o mesmo tamanho da imagem origem
int[] rgb = new int[largura * altura];
//Preenche o vetor RGB com as cores dos pixels da imagem origem
imgOriginal.getRGB(rgb, 0, largura, 0, 0, largura, altura);
//Deixa a imagem transparente, respeitando a transparência já existente
for (int i = 0; i < rgb.length; i++)
rgb[i] = (((porcentagem * ((rgb[i] & 0xFF000000) >>> 24))
/ 100) * 0×1000000) + (rgb[i] & 0×00FFFFFF);
//Cria a imagem final com base no vetor RBG com transparência alterada
return Image.createRGBImage(rgb, largura, altura, true);
}
Para usar esse método, basta eu chamá-lo da seguinte forma:
Image imagem = Image.createImage(”\foto.png”);
imagem = transparentImage(imagem, 50);
Isso fará com que a imagem fique 50% transparente.
O núcleo do método, é o for, que percorre todos os pixels da imagem, agindo sobre cada um deles. Para cada um faz o cálculo da nova cor, levando em consideração a transparência já existente.
Para deixar um pixel semi-transparente precisa-se apenas alterar o canal alpha da cor. O canal alpha da de uma cor é representado pelo FF neste exemplo de cor:
int cor = 0xFF554422
É isso! Agora você já sabe como fazer para deixar suas imagens semi-transparentes em J2ME.
Bons códigos!
Sobre o Autor
Nelson é desenvolvedor há 12 anos. Hoje desenvolve aplicações Web e Móveis na Abacomm Brasil cuidando do desenvolvimento server-side J2EE, banco de dados, design de aplicações móveis, e desenvolvimento móvel usando várias plataformas como BlackBerry, J2ME, FlashLite, Android, etc. Para conversar com o autor use o e-mail, MSN e GTalk npereirajr@gmail.com.

Deixe um comentário