Zeichnen Transparente Bilder In Java Graphics2D

Ich will zeichnen Sie ein TEILWEISE transparentes Bild auf ein anderes (Macht Schatten über die Dinge). Ich bin derzeit mit java Graphics2D Klasse zu Rendern, ich habe gesagt, um die composite AlphaComposite, aber das nur setzt es komplett transparent.

Kann ich dies mit meiner aktuellen setup? Was muss ich tun, um dies zu beheben?

Dies ist der code wurde mir gesagt, dass es machen würde, teilweise transparent:

    AlphaComposite ac = java.awt.AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.5F);
    g.setComposite(ac);

(Ich bin mit png-Bildern durch die Art und Weise)

Heres Ihre sscce (diese sind alle in verschiedenen Klassen, aber ich lege Sie zusammen, für die Einfachheit) (ich benutze ein Bild namens "Test" in den lokalen Ordner "Bilder", die Sie verwenden können, was auch immer, solange es ist ein png Bild mit dem Namen die gleiche

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Window;

import javax.swing.ImageIcon;

import com.blazingkin.atrox.ScreenManager;

public class AtroxAdventrum{

public static void main(String[] args) {
new AtroxAdventrum().run();
}

    private static DisplayMode modes[] = {

        //new DisplayMode(1080,720,32,0),
        //new DisplayMode(1080,720,24,0),
        //new DisplayMode(1080,720,16,0),
        //new DisplayMode(1440,900,32,0),
        //new DisplayMode(1440,900,24,0),
        //new DisplayMode(1440,900,16,0),

    };
    private boolean running = true;
    public ScreenManager s;

    public void stop(){
        running = false;
    }

    public void run(){
        try{
            init();
            gameLoop();
        }finally{
            s.restoreScreen();
        }
    }

    public void init(){
        s = new ScreenManager();
        DisplayMode dm = s.findFirstCompatibleMode(modes);
        s.setFullScreen(dm);


        Window w = s.getFullScreenWindow();
        w.setFont(new Font("Arial", Font.PLAIN, 20));
        w.setBackground(Color.black);
        w.setForeground(Color.white);
    }

    public void gameLoop(){
        long startTime = System.currentTimeMillis();
        long cumTime = startTime;

        while (running)
        {
            long timePassed = System.currentTimeMillis() - cumTime;
            cumTime += timePassed;
            if (limitfps){
            try{
                Thread.sleep(15);
            }catch(Exception e){}
            }
            update(timePassed);
            Graphics2D g = s.getGraphics();
            draw(g);
            g.dispose();
            s.update();
        }
    }

    public void update(long timePassed){
    }

    public boolean limitfps = false;

        public void draw(Graphics2D g){
        g.clearRect(0, 0, s.getWidth(), s.getHeight());
        AlphaComposite ac = java.awt.AlphaComposite.getInstance(AlphaComposite.CLEAR,0.5F);
        g.setComposite(ac);
        g.drawImage(new ImageIcon("Images/Test.png").getImage(), 30, 30, 30, 30, null);
        }







}

Wenn Sie diese ausführen, müssen Sie alt + tab raus und beenden Sie den Prozess (als es nicht über alles, was in diesem Teil des Codes zu tun)

InformationsquelleAutor der Frage blazingkin | 2011-11-25

Schreibe einen Kommentar