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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bist du mit dem falschen Regel-nicht verwenden AlphaComposite.KLAR.
Die AlphaComposite-API-Staaten an KLARE:
So wird das Bild verschwinden. Experimentieren Sie mit anderen Regeln. Während Sie die Erstellung Ihrer SSCCE, ich habe meine. Sehen, was passiert, wenn Sie kommentieren Sie die eine Regel Linie für die anderen. Zum Beispiel ändern Sie diese
:
Den ganzen SSCCE:
Durch die Art und Weise, Ihre SSCCE ist kein echter SSCCE. Es gibt keine Weise, dass jeder von uns kann kompilieren oder ausführen, die code, wie es hat Abhängigkeiten, die wir keinen Zugang haben, nämlich "com.blazingkin.atrox.ScreenManager". Wenn Sie unsere Hilfe brauchen in Zukunft, Sie werden wollen, schreiben Sie besser erfüllen sscce.
InformationsquelleAutor der Antwort Hovercraft Full Of Eels