Muchas Gracias Lucas,

 

Ya había resuelto la problemática pero de todas formas le voy a echar un 
vistazo a lo que propones. 

 

 

Ignacio Gámez Ramírez

Geograma S.L.

Topografía, Cartografía y Sistemas de Información Geográfica

www.geograma.com <http://www.geograma.com/> 

 

De: [email protected] 
[mailto:[email protected]] En nombre de Juan Lucas 
Dominguez Rubio
Enviado el: viernes, 03 de julio de 2009 14:25
Para: Lista de Desarrolladores de gvSIG; Lista de Desarrolladores de gvSIG
Asunto: Re: [Gvsig_desarrolladores] gvSig Mobile + J9 + imagenescontransparencia

 

Hola, Ignacio.


Creo que no es posible en J9 instanciar directamente un BufferedImage con 
transparencia (4 bandas) para modificarlo después.

 

¿Has probado a instanciar uno y después usar setRGB(int startX, int startY, int 
w, int h, int[] rgbArray, int offset, int scansize) para ver si le hace caso al 
valor alpha de cada pixel?


Si eso no funciona, yo intentaría hacer lo siguiente:


- instanciar un BufferedImage de tres bandas y pintar en él la imagen (por 
ahora opaca) que te interesa. Después le pides los valores de sus píxels con 
getRGB(...) y tienes un array de int en los que el byte más alto de cada int es 
la transparecncia, pero no tiene el valor que tú quieres


- instanciar otro BufferedImage del mismo tamaño y en él pintas en blanco, 
negro y escala de grises el nivel de opacidad que quieres para cada pixel 
(negro = 100% transparente, blanco = 100% opaco)


- recorres al array obtenido en el primer paso y le insertas en cada int el 
byte más alto con el valor que tiene uno cualquiera de los bytes (R, G o B) de 
la imagen en blanco y negro, y tendrás un int[] con toda la información de tu 
imagen final.


A continuación, creo que tienes por lo menos dos opciones para instanciar la 
imagen final:


- crear un java.awt.image.MemoryImageSource pasándole ese int[] que ya tiene 
todos los valores de colores y opacidad bien puestos y finalmente, con 
Toolkit.getDefaultToolkit().createImage(ImageProducer) debería crearte la 
imagen con transparencia que quieres puesto que MemoryImageSource implementa 
ImageProducer.


- otra opción es utilizar un método JNI que usamos para crear archivos PNG en 
memoria:


byte[] png_data = ECWReader.paintArray(int[] bitmap, int w, int h, int offset, 
boolean has_transp);


Si le pasas el array de int que has obtenido, el tamaño de la imagen y offset = 
0 y has_transp = true, debería devolverte un array de bytes que son el 
contenido de un PNG y puedes usar directamente para instanciar una imagen con 
transparencia:


Image img = Toolkit.getDefaultToolkit().createImage(png_data);

 

 

Estos ejemplos sirven para crear imágenes finales, es decir, el resultado no es 
editable con setRGB(...) y lo que puedes hacer con esas imágenes es cambiarles 
de tamaño y pegarlas donde te interese.

 

 

 

 

Saludos,

 

Juan Lucas Domínguez Rubio
---

Prodevelop SL, Valencia (España)

0° 22' 49.62" W, 39° 28' 25.45" N
Tlf.: 96.351.06.12 -- Fax: 96.351.09.68
http://www.prodevelop.es <http://www.prodevelop.es/> 
---

 

________________________________

De: [email protected] en nombre de Ignacio Gámez 
Ramírez
Enviado el: jue 02/07/2009 13:21
Para: Lista de Desarrolladores de gvSIG
Asunto: [Gvsig_desarrolladores] gvSig Mobile + J9 + imagenes contransparencia

Buenas,

 

Estoy intentando crear una imagen (bufferedImage) con transparencia utilizando 
el método Utils.createBufferedImage pasádonle el tercer parámetro de la 
transparencia pero la máquina virtual J9 me da error. ¿alguien sabe como se 
puede crear un bufferedImage con transparencia para J9?

 

Gracias y un saludo.

 

Ignacio Gámez Ramírez

 

Geograma S.L.

Topografía, Cartografía y Sistemas de Información Geográfica

www.geograma.com <http://www.geograma.com/> 

 

_______________________________________________
gvSIG_desarrolladores mailing list
[email protected]
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

Responder a