superposición de imágenes en java

Espero que me puedan dar algunos consejos para resolver mi problema. Necesito superponer muchas imágenes en un botón. Pero el problema es que esta es la imagen base (diente): (http://i.imgur.com/7tIcP.gif)

mi primera imagen es esta: http://i.imgur.com/FYuD8.gif y luego pongo esto: http://i.imgur.com/mWz9c.gif la primera imagen se superpone a la segunda, así que solo puedo ver la segunda imagen ...

tal vez me diga que una opción es cambiar el orden de la imagen antes de la superposición, pero el usuario seleccionará cuál será la primera, tal vez solo desee la primera imagen, pero en otros casos el usuario pondrá la primera Y luego la segunda o viceversa...

mi código es este:

    BufferedImage large=null;
    large = ImageIO.read(new File("firstimage.gif"));

    BufferedImage small=null;

    small = ImageIO.read(new File("secondimage.gif"));

    int w = Math.max(large.getWidth(), small.getWidth());
    int h = Math.max(large.getHeight(), small.getHeight());

    BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

    // paint both images, preserving the alpha channels
    Graphics g = combined.getGraphics();
    g.drawImage(large, 0, 0, null);
    g.drawImage(small, 0, 0, null);

    ImageIO.write(combined, "PNG", new File("twoInOne.png"));

    ImageIcon icon1 = new ImageIcon(combined);
    jbutton1.setIcon(icon1);

Tal vez sea un formato del problema de las imágenes, o mi código, pero prefiero que ustedes puedan ayudarme con este problema, gracias.

Ahora cargué las 3 imágenes: omito la imagen base (diente) porque no creo que sea el problema allí.

Respuesta 1

¿Necesito editar mis imágenes para obtener un fondo transparente?

Para hacer que un color en particular sea transparente, puede iterar a través de los píxeles de ao BufferedImageusar un adecuado LookupOp. Para lo último, vea los artículos citados aquí. Luego puede combinar las imágenes usando drawImage(). La regla compuesta predeterminada AlphaComposite.SRC_OVER, debería ser satisfactoria; si no, puede cambiarlo, como se muestra aquí.

Respuesta: 2

Su código debería estar bien para combinar dos imágenes juntas. Sin embargo, como dijiste, tus dos imágenes son del mismo tamaño y no parecen tener ninguna transparencia. Esto hará que cualquier imagen que se dibuje en segundo lugar siempre "sobrescriba" la primera imagen en la imagen recién combinada.

La solución que probablemente desee para esto es dividir las distintas piezas que desea superponer una encima de la otra en imágenes separadas y más pequeñas. Con sus imágenes, parece que desea tener varias superposiciones en la parte superior de un diente para mostrar varias piezas de información. En este caso, querrá tener tres cosas: una imagen de un diente, una imagen que contenga la superposición roja y una imagen que contenga la superposición azul. Las tres imágenes deben tener un fondo transparente, y no blanco, para que no sobrescriban los colores en ninguna imagen dibujada previamente. Cuando haga esto, querrá dibujar el diente, luego superponer 1 (rojo / azul) y luego superponer 2 (rojo / azul). Esto debería obtener la salida que está buscando.

Respuesta: 3

Este mapeo ha funcionado con ES 2.X, ahora con ES 5 obtengo una excepción: {"type1": {"properties": {"name": {"type": "multi_field", "fields": {.. .

Estoy en el proceso de actualizar una aplicación heredada para usar Java 6 SE en lugar de Java 5 SE. La aplicación usa JAXB, y bajo Java 5 SE tiene los frascos de implementación de referencia JAXB en el classpath. Cuando ...

Estoy tratando de extraer los valores de este código html: <ul id = "tree-dotlrn_class_instance"> <li> <a href="/dotlrn/classes/c033/13000/c12c033a13000gA/"> ** 2011- 12 Ampl ....

Así que aquí está el problema, actualmente estoy trabajando en un proyecto donde la interfaz está estrechamente unida al backend. La versión heredada de la aplicación se crea utilizando archivos .JSP, el archivo de índice es un índice ...