Domanda

Ho notato che quando disegno qualcosa con il Colore(0,0,0,0), che è in un'altra immagine, il colore visualizzato è il JFrame sfondo, non l'immagine sottostante.

I motivi che mi aiutano a trovare una soluzione?

Grazie!!

Edit:Vedere i cerchi, la zona grigia (angoli) deve essere trasparente, ma non sono, invece, essi sono il colore del JFrame.il testo alt http://img72.imageshack.us/img72/9657/transparency.png

E qui c'è il codice per disegnare i cerchi:

public void paint(final Graphics g) {
        super.paintComponent(g);
        final Graphics2D g2 = (Graphics2D) g;

        RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        if (unitImage == null) {

            unitImage = (BufferedImage) (createImage(30, 30));
            final Graphics2D gc = unitImage.createGraphics();
            gc.setRenderingHints(rh);
            gc.setColor(outsideColor);
            gc.fillOval(0, 0, diameter, diameter);
            gc.setColor(middleColor);
            gc.fillOval(diameter / 6, diameter / 6, (diameter / 3) * 2, (diameter / 3) * 2);
            gc.setColor(innerColor);
            gc.fillOval(diameter / 3, diameter / 3, diameter / 3, diameter / 3);
        }

        g2.drawImage(unitImage, null, 0, 0);

State giocando con il Alphacomposites, penso che la sua non è la soluzione.Così ho aggiunto tutte queste nuove informazioni che, credo, vi aiuterà a ragazzi di darmi un'altra punta.

È stato utile?

Soluzione

@Chuk Lee ha ragione: se non la si cambia, il default Graphics2D composito è AlphaComposite.SrcOver . Questo pratico strumento visualizza il risultato composito per una regola selezionata e una coppia di colore specificato e alfa.

Addendum: Un approccio è quello di ignorare paintComponent() e rendere sia mappa e circoli, ma si potrebbe essere in grado di rendere gli angoli trasparenti deselezionando l'alfa:

...
gc.setRenderingHints(rh);
gc.setComposite(AlphaComposite.Clear);
gc.fillRect(0, 0, diameter, diameter);
gc.setComposite(AlphaComposite.Src);
gc.setColor(outsideColor);
...

non createImage(30, 30) riguardano diameter? Per quale componente si fa a ignorare paint() e invocare super.paintComponent(g)?

Altri suggerimenti

Hai impostato il AlphaComposite prima di iniziare a disegnare?

Graphics2D g2d = (Graphics2D)g; //Some graphics object
//Save the original
Composite original = g2d.getComposite();
//Set to semi translucent
Composite translucent = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2d.setComposite(translucent);

//Draw

//Set back to original
g2d.setComposite(original);

Disclaimer:codice nota testata

si è dipinto con un'opacità 0. Se è nero che si desidera, utilizzare il colore (0,0,0,255).

UPDATE

Siamo spiacenti, ho capito male la domanda. Dopo aver letto il codice è stato aggiunto al tuo post, suppongo che i piccoli obiettivi sono componenti posizionati sulla parte superiore della mappa che è disegnato su un componente principale.

Per garantire che la trasparenza è usato avete bisogno di due cose:

  1. è necessario chiamare setOpaque (false) nel costruttore del componente di destinazione
  2. O disegnare direttamente l'obiettivo senza archiviazione secondaria, o utilizzare un'immagine RGBA:

    unitImage = new BufferedImage (30, 30, BufferedImage.TYPE_INT_ARGB);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top