Rotation von Bildern schlägt fehl

Status
Nicht offen für weitere Antworten.
Q

qbopa

Gast
Hi, ich versuche Bilder in ein JLabel als ImageIcon reinzuladen und dann per tastendruck um eine bestimmte gradzahl zu drehen.

Wenn ich ganz normale Bilder nehme die keinen! transparenten hintergrund haben funktioniert die drehung einwandfrei.
Das problem ist dass ich das auch mit Transparenten Bilder machen muss. Doch da wird nach der Drehung das bild nur schwarz

Hier mein Code:
Code:
    private static BufferedImage rotateImage(BufferedImage src, double degrees) {
        AffineTransform affineTransform = AffineTransform.getRotateInstance(Math.toRadians(degrees), src.getWidth() / 2, src.getHeight() / 2);
        BufferedImage rotatedImage = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
        Graphics2D g = (Graphics2D) rotatedImage.getGraphics();
       // g.setComposite(AlphaComposite.getInstance(AlphaComposite.DST, 150f));
        g.setTransform(affineTransform);
        g.drawImage(src, 0, 0, null);
        return rotatedImage;
	
	
    }




Wie schaff ich es transparente bilder zu drehen. danke :meld:
 
Q

qbopa

Gast
achso ^^. mit transparent mein ich ein Bild mit Transparenten hintergrund ( entweder png oder gif)
 

Marco13

Top Contributor
Ja, oder validate :roll:

Poste ein kleines, selbstständig compilierbares, alleine Lauffähiges Beispiel.
 
Q

qbopa

Gast
jo hier ist mal der code. ich hab repaint und validate probiert doch leider ohne erfolg.


Code:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingWorker;




public class battle extends JPanel implements KeyListener{
	private JFrame fenster;
	private JPanel hintergrundPanel;
	private JPanel hintergrundbild;
	private JLabel flugzeug1;
	private JPanel flugzeug2;
	private Graphics  bild;
	private JLabel hinterbild;
	//public static final long SPEED = 1000L; 
	public boolean laeuft = true; 
	BufferedImage pic; 
	public int timer;
	public int positionx;
	public int positiony;
	public int flugzeugtyp=0;
	public ImageIcon imageicon= new ImageIcon("C://Spiele/battle/Flieger2.gif");
	
	public battle()
	{
		
		fenster=new JFrame("Battle over Crailsheim");
		fenster.setSize(1,1);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		hintergrundPanel=new JPanel();
		hintergrundPanel.setBackground(Color.black);
		
		
		hinterbild=new JLabel();
		
		hinterbild.setIcon(new ImageIcon("C://Spiele/battle/hintergrund.png"));

		
		
		
		
		hintergrundbild=new JPanel();
		hintergrundbild.add(hinterbild);
		
		
				
		flugzeug1=new JLabel();
		flugzeug1.setIcon(new ImageIcon("C://Spiele/battle/Flieger2.gif"));
		flugzeug1.setVerticalAlignment(1);
		hinterbild.setVerticalAlignment(0);
		
		//fenster.add(hintergrundPanel);
		//hintergrundPanel.add(hintergrundbild);
		
		
		flugzeug1.setLocation(1,1);
		

		fenster.addKeyListener(this);
		
		URL pic_url = this.getClass().getClassLoader().getResource("hintergrund.png");
		
		try {
	         pic = ImageIO.read(pic_url);
	      } catch (IOException e) {
	         e.printStackTrace();
	      } 
		fenster.add(this);
		this.add(flugzeug1);
		fenster.setSize(700,550);	
		flugzeug1.setLocation(500,440);
		fenster.repaint();
		positionx=450;
		positiony=440;
		
		flugzeug1.setLocation(positionx,positiony);
		
		for(int i=0;i<500;i++){ //warteschleife für dauer des spiels
		warteschleife();
		}
		
	
		
	}
	
	
	public static void main(String[] args0)
	{
		battle test = new battle();
	}
	protected void paintComponent(Graphics g) {
	      super.paintComponent(g);
	      g.drawImage(pic,20,20,this);
	      
	   }


	public void keyPressed(KeyEvent arg0) {
		int key = arg0.getKeyCode();
		switch (key){
		case KeyEvent.VK_LEFT: links1(); break;
		case KeyEvent.VK_RIGHT: rechts1();break;
		case KeyEvent.VK_SPACE: feuer1();break;
		}
		
	}


	public void keyReleased(KeyEvent arg0) {
		
		
	}


	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	public void lasslaufen()
	{
		
			
			flugzeug1.setLocation(positionx-timer,positiony);
		
	}
	
	public void warteschleife()
	{
		   SwingWorker worker = new SwingWorker<Boolean, Void>() {
			   long SPEED=100L;
			      public Boolean doInBackground() {
			         try {
			        	 Thread.sleep(SPEED);
			      } catch (InterruptedException e) {
			         
			         e.printStackTrace();
			      }
			      if(laeuft){
			    	  timer=timer+1;
			    	  
			    	  if (positionx-timer<0)
			    	  {
			    		  timer=0;
			    		  positionx=640;
			    	  }
			    	  
			          lasslaufen();
			          } 
			      return true;
			      }
			      
			   };
			   worker.execute(); 
	}
	
	
	
	public void links1()
	{
		BufferedImage test;
		try {
			test = ImageIO.read(new File("C://Spiele/battle/Flieger2.gif"));
		
		BufferedImage rotatedImage = rotateImage(test, -90.0);
		
		
		
		flugzeug1.setIcon(new ImageIcon(rotatedImage));
		} catch (IOException e) {
			System.out.println("Fehler beim laden der Dateien");
		}
	}
	public void rechts1()
	{
		BufferedImage test;
		try {
			test = ImageIO.read(new File("C://Spiele/battle/Flieger2.gif"));
		
		BufferedImage rotatedImage = rotateImage(test, 90.0);
		
		
		
		flugzeug1.setIcon(new ImageIcon(rotatedImage));
		} catch (IOException e) {
			System.out.println("Fehler beim laden der Dateien");
		}
		//flugzeug1.repaint();
		//flugzeug1.validate();
	}
	public void feuer1()
	{
		
	}

    private static BufferedImage rotateImage(BufferedImage src, double degrees) {
        AffineTransform affineTransform = AffineTransform.getRotateInstance(Math.toRadians(degrees), src.getWidth() / 2, src.getHeight() / 2);
        BufferedImage rotatedImage = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
        Graphics2D g = (Graphics2D) rotatedImage.getGraphics();
       // g.setComposite(AlphaComposite.getInstance(AlphaComposite.DST, 150f));
        g.setTransform(affineTransform);
        g.drawImage(src, 0, 0, null);
        return rotatedImage;

    }
	
}











Danke für die hilfe :meld:
 
Q

qbopa

Gast
achso ja wegen den bildern. also falls nötig lade ich die bilder selbstverständlich hoch ^^. zum test kann man auch einfache transparente bilder erstellen.

Wie gesagt mit normalen bildern geths es scheitert nur bei transparenten bildern ^^
 
Q

qbopa

Gast
oder falls das nicht möglich ist mit transparenten bilder könnte mir jemand erklären warum es nicht funktioniert?



thx :)
 

Marco13

Top Contributor
Das mit dem validate war nur ein Witz - in Anlehung an das 'repaint' ... was wohl leider KEIN Witz war... (oder sein sollte).


Hab's jetzt mal mit eigenen Bildern getestet, und es funktioniert, sofern man
BufferedImage rotatedImage = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
ändert in
BufferedImage rotatedImage = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_ARGB);

Lade ggf. mal deine eigenen Bilder hoch. Ich sehe keinen Grund, warum es nicht funktionieren solle.

(Abgesehen davon, dass die Bilder nicht bei jeder Drehung neu geladen und gedreht werden sollten, aber ... Windmühlen...)
 
Q

qbopa

Gast
Ah ok vielen dank jetzt gehts. Lag an dem BufferedImage.TYPE_INT_ARGB.

Wunderbar, Danke


Daumen hoch ^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
L util.logging Log Rotation Allgemeine Java-Themen 3
J rotation von Graphics2D mit anschließender Translation Allgemeine Java-Themen 2
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
R Optimierung beim Vergleichen von 2 Bildern Allgemeine Java-Themen 23
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
D Tool zum skalieren von bildern Allgemeine Java-Themen 4
X Skalierung von Bildern zum Start des Programms Allgemeine Java-Themen 3
A Metadaten von Bildern auslesen und verändern Allgemeine Java-Themen 5
Kr0e Differenzen von Bildern berechnen - Remote control Allgemeine Java-Themen 2
F hex-farbwert der pixel aus bildern lesen Allgemeine Java-Themen 4
K Thread mit Bildern Allgemeine Java-Themen 3
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
L Problem beim animieren von Bildern in Applet Allgemeine Java-Themen 23
K Positionierung von Labels mit Bildern über anderen Allgemeine Java-Themen 8
X Mustererkennung von JPG Bildern Allgemeine Java-Themen 5
data89 Java und HTML-Seiten mit Bildern - Wie passt das zusammen? Allgemeine Java-Themen 2
K Schreiben von Bildern: Bild bleibt leer Allgemeine Java-Themen 7
I Qualität von bearbeiteten Bildern? Allgemeine Java-Themen 3
S software zum zuschneiden von Bildern Allgemeine Java-Themen 2
P Abspeicherung von Bildern Allgemeine Java-Themen 7
T Langsames Laden von Bildern und Heap Exception Allgemeine Java-Themen 7
T Verkleinerung von Bildern Allgemeine Java-Themen 23
M transparenz bei png bildern beibehalten Allgemeine Java-Themen 11
A Schnelles laden von Bildern Allgemeine Java-Themen 3
M Problem beim laden von vielen Bildern Allgemeine Java-Themen 16
D Problem mit Bilderupload von lokalen Bildern bei eBay Allgemeine Java-Themen 8
M Strukturen in Bildern vergleichen Allgemeine Java-Themen 6
C Download von Bildern etc. realisieren Allgemeine Java-Themen 2
N Regex schlägt nicht an Allgemeine Java-Themen 10
mrbig2017 Kapselung Methodenaufruf in DLL schlägt fehl! Allgemeine Java-Themen 1
C Entschlüsselung schlägt fehl Allgemeine Java-Themen 1
J Stringvergleich schlägt fehl Allgemeine Java-Themen 5
M Verbindung zu Webserver schlägt fehl Allgemeine Java-Themen 0
Thallius Serialisierung schlägt fehl. Allgemeine Java-Themen 3
P Kosinusberechnung schlägt fehl Allgemeine Java-Themen 5
B Reflection: getMethods schlägt fehl (NoClassDefFoundE)) Allgemeine Java-Themen 15
A mit .equals Array befüllen schlägt teilweise fehl Allgemeine Java-Themen 3
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
S mkdirs schlägt fehl Allgemeine Java-Themen 5
T Lesezugriff auf Consolenprogramm schlägt fehl Allgemeine Java-Themen 9
M Casten von Liste nach Array schlägt fehl?? Allgemeine Java-Themen 3
GilbertGrape Warum schlägt JUnit-Test fehl? Allgemeine Java-Themen 19
J Jar datei erstellen schlägt fehl Allgemeine Java-Themen 3
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben