Transparente Bilder mit Graphics zeichnen

TimeIsTheKey

Aktives Mitglied
Hallo

Wie kann ich mit Graphics transparente Bilder zeichnen?
Hier mal meine Code-Schnippsel:

Klasse GameAni:
Code:
BufferedImage img1,img2;
...
img2 = loadImage("MajinVegeta.PNG");
pan2 = new JImagePanel2("Akteur 1",img2,0,0);
...
pan1.setLayout(null);
pan1.setBounds(0,0,pan1.getImageH(),pan1.getImageW());
...
public BufferedImage loadImage(String ref){
		BufferedImage bimg = null;  
	    try {
	      bimg = ImageIO.read(new File(ref));  
	    } catch (Exception e){  
	      e.printStackTrace();  
	    }  
	    return bimg;
	}
...

Klasse JImagePanel2:
Code:
public class JImagePanel2 extends JPanel{
	private BufferedImage image;
	int x, y;
	int positionx,positiony;
	String name;
	
	public JImagePanel2(String name,BufferedImage image, int x, int y) {
		super();
		this.image = image;
		this.x = x;
		this.y = y;
		this.name = name;
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawImage(image, x, y, null);
	}

// Get-/Set-Methoden für die Variablen
...
}

Die Bilder haben einen Charakter drauf mit einem transparenten Hintergrund. Gibt es einen einfachen Weg dies zu ermöglichen? Ich habe auch gehört, dass man durch jeden Pixel im BufferedImage gehen kann um nachzuprüfen, ob es transparent ist und es mit einem Wert zu beschreiben, der in Graphics transparent gezeigt wird. Allerdings weiss ich nicht wie das geht.

Ich habe hier sowieso gleich ein weiteres Problem. Mein Bild hat eine Höhe von 35 px und 77 px in der Breite. Allerdings wird das Bild mit einer Breite von 35 px gelesen und einer Höhe von 77 px. Bei den anderen Bildern klappt es aber. Wo könnte da der Fehler sein?

Achja, wie kann man aus BufferedImage Bereiche ausschneiden? Ich will, falls niemand eine Lösung zum Hauptproblem kennt, versuchen es mit einem JLabel zu lösen und müsste das dafür wissen.

MfG SurviveX
 

Marco13

Top Contributor
Transparent malen sollte automatisch gehen, aber super.paintComponent löscht meistens den Hintergrund.
Wenn das Bild gedreht eingelesen wird, hat das meistens den Grund, dass es gedreht IST.
Bereiche "auschneiden"... Es gibt sowas wie BufferedImage.getSubimage (oder so), aber ob das das ist, was du meinst...?
 

TimeIsTheKey

Aktives Mitglied
Transparent malen sollte automatisch gehen, aber super.paintComponent löscht meistens den Hintergrund.
Wenn das Bild gedreht eingelesen wird, hat das meistens den Grund, dass es gedreht IST.
Bereiche "auschneiden"... Es gibt sowas wie BufferedImage.getSubimage (oder so), aber ob das das ist, was du meinst...?

Zum 1. Punkt: Was bedeutet meistens? Mir wurde gesagt das dies nicht geht. Wie kriege ich es also hin die Transparenz anzuzeigen?

Zum 2. Punkt: Hmmm... Ich werde aus der Ausgabe mit dem Bild drehen nicht schlau. Ich habe vor diesem transparenten Bild schon ein Bild normal geladen und nach diesem nochmals. Beide Bilder werden normal angezeigt. Wieso sollte es also gedreht sein? ???:L
Apropo. Hier mal ein Screenshot damit du siehst was ich meine:
transfehler.png


Zum 3. Punkt: Danke. Genau das habe ich gemeint. Ich dachte ich hätte mir die API gründlich angeschaut, aber anscheinend habe ich das übersehen. :autsch:
 

Marco13

Top Contributor
Das "meistens" war ein bißchen... sarkastisch :oops: Wenn man ein Bild der Größe 50x100 einliest, dann hat das entweder eine Größe von 50x100, oder es gibt zwei Möglichkeiten:
- Man irrt sich, wenn man glaubt, es wäre 50x100 oder würde mit einer anderen Größe gelesen
- In ImageIO ist ein Fehler, der bewirkt, dass eingelesene Bilder die falsche Größe haben.
Wenn ich wetten sollte... ... ... ;)

Zum 1. noch ganz allgemein: Enthält das Bild wirklich Transparenz? Kannst mal testweise z.B. http://download.oracle.com/javase/t...Project/src/components/images/dukeWaveRed.gif verwenden, um das Problem ggf. einzugrenzen - PNG is nochmal was (ganz) anderes, aber das wäre ja schonmal ein Anhaltspunkt
 

TimeIsTheKey

Aktives Mitglied
Das "meistens" war ein bißchen... sarkastisch :oops: Wenn man ein Bild der Größe 50x100 einliest, dann hat das entweder eine Größe von 50x100, oder es gibt zwei Möglichkeiten:
- Man irrt sich, wenn man glaubt, es wäre 50x100 oder würde mit einer anderen Größe gelesen
- In ImageIO ist ein Fehler, der bewirkt, dass eingelesene Bilder die falsche Größe haben.
Wenn ich wetten sollte... ... ... ;)

Zum 1. noch ganz allgemein: Enthält das Bild wirklich Transparenz? Kannst mal testweise z.B. http://download.oracle.com/javase/t...Project/src/components/images/dukeWaveRed.gif verwenden, um das Problem ggf. einzugrenzen - PNG is nochmal was (ganz) anderes, aber das wäre ja schonmal ein Anhaltspunkt

Hmmm... Irgendetwas stimmt mit meinem PNG nicht. Versuch es mal selbst mit dem (im Anhang). Mit dem dukeWaveRed-Bild wird es nicht umgekehrt angezeigt, aber die Transparenz fehlt. Wie kriege ich es nun mit der Transparenz hin?

Ich würde mich auch schon freuen wenn ich irgend einen Weg finden würde ...
 

Anhänge

  • vegetax.png
    vegetax.png
    2,1 KB · Aufrufe: 201
Zuletzt bearbeitet:

Marco13

Top Contributor
Irgendwie hatte ich schon damit gerechnet, aber ... er zeichnet das Bild halbtransparent über die Linien. Was soll man sagen...
Java:
import java.awt.image.*;
import java.awt.*;
import javax.swing.*;
import javax.imageio.*;
import java.io.*;


class TransparentTest
{
    public static void main(String args[]) throws Exception
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final BufferedImage image = ImageIO.read(new File("vegetax.png"));
        JPanel p = new JPanel()
        {
            public void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                g.setColor(Color.BLACK);
                for (int i=0; i<100; i+=5)
                {
                    g.drawLine(i,0,i,100);
                }
                g.drawImage(image,0,0,this);
            }
        };


        f.getContentPane().add(p);
        f.setSize(100,100);
        f.setVisible(true);
    }
}
 

Marco13

Top Contributor
Das Bild, das du gepostet hast, wird dort gezeichnet. Halbtransparent über den Hintergrund, und in der richtigen Größe. Wenn er es bei dir nicht richtig zeichnet, liegt das vermutlich an irgendeinem Fehler im (nicht geposteten) Quellcode...
 

Marco13

Top Contributor
In Anlehnung an
Wenn das Bild gedreht eingelesen wird, hat das meistens den Grund, dass es gedreht IST.
könnte ich hier sagen: Wenn das Bild halbtransparent angezeigt wird, hat das meistens den Grund, dass es halbtransparent IST ;)

Es IST eben halbtransparent. Schau es dir z.B. mal in HTML-Seiten der Form
Code:
<html><body bgcolor=[b]"white"[/b]><img src="vegetax.png" /></body></html>
an, und setz' dort statt "white" eben "black", "green", "red" usw. ein: Die Arme und die Hose sind Halbtransparent, und die Hintergrundfarbe schimmert dort durch. Wenn du das nicht willst, wirst du wohl ein Zeichenprogramm bemühen müssen....
 

Cola_Colin

Top Contributor
Hab in einem Anflug von eigenem Interesse an der Problemlage das ganze glaub ich gelöst, was die Transparenz angeht.
 

Anhänge

  • vegetax.png
    vegetax.png
    2 KB · Aufrufe: 146

muckelzwerg

Bekanntes Mitglied
Verzichte doch erstmal auf das Bild und zeichne ein gewöhnliches Grafikelement. Ein Rechteck, einen Kreis, was auch immer.
Am besten gleich mehrere, die sich überschneiden.
Als Farben gibts Du sowas wie "new Color(1f, 0.f, 0.f, 0.5f))" an.
Erstmal rantasten ob die Transparenz funktioniert, oder ob die Bilder vielleicht im falschen Modus sind.

Danach probierst Du das gleiche mit drawImage().
Wenn es nicht geht. schnappst Du Dir ein Zeichenprogramm und schaust mal in die Bilder rein.
 

TimeIsTheKey

Aktives Mitglied
In Anlehnung an

könnte ich hier sagen: Wenn das Bild halbtransparent angezeigt wird, hat das meistens den Grund, dass es halbtransparent IST ;)

Es IST eben halbtransparent. Schau es dir z.B. mal in HTML-Seiten der Form
Code:
<html><body bgcolor=[b]"white"[/b]><img src="vegetax.png" /></body></html>
an, und setz' dort statt "white" eben "black", "green", "red" usw. ein: Die Arme und die Hose sind Halbtransparent, und die Hintergrundfarbe schimmert dort durch. Wenn du das nicht willst, wirst du wohl ein Zeichenprogramm bemühen müssen....

Hab nun gesehen das es halbtransparent ist. Ich bin farbenblind. Eventuell ist mir das deswegen nie aufgefallen. Das mit dem halbtransparent sein hat sich gelöst. Dennoch bestehen 2 Probleme. Wieso wird das Bild gedreht? Ich mache nichts mit dem Bild. Was stimmt also mit dem Bild nicht?
Dann wäre da noch das die Transparenz nicht angezeigt wird. Mit einem JLabel wird sie nämlich angezeigt. Siehe:

http://img571.imageshack.us/img571/6553/vegetaxprob.png
http://img13.imageshack.us/img13/6632/transparenzf.png

Mit JLabel:
http://img190.imageshack.us/img190/165/vegetajlabel.png
http://img696.imageshack.us/img696/1608/transduke.png

Hab in einem Anflug von eigenem Interesse an der Problemlage das ganze glaub ich gelöst, was die Transparenz angeht.

Danke für die Mühe. Ich versuchs später mit dem Bild ^^

Verzichte doch erstmal auf das Bild und zeichne ein gewöhnliches Grafikelement. Ein Rechteck, einen Kreis, was auch immer.
Am besten gleich mehrere, die sich überschneiden.
Als Farben gibts Du sowas wie "new Color(1f, 0.f, 0.f, 0.5f))" an.
Erstmal rantasten ob die Transparenz funktioniert, oder ob die Bilder vielleicht im falschen Modus sind.

Danach probierst Du das gleiche mit drawImage().
Wenn es nicht geht. schnappst Du Dir ein Zeichenprogramm und schaust mal in die Bilder rein.

Die Bilder sind nicht im falschen Modus. Mit einem JLabel geht immerhin folgendes:

http://img696.imageshack.us/img696/1608/transduke.png

Graphics hat da irgend ein Problem.
 

muckelzwerg

Bekanntes Mitglied
Ich verstehe nicht, was Du mit "JLabel" meinst. Erklär mal.
Du kannst Dir auch im Internet andere Bilder mit Transparenz besorgen und mal schauen, ob es mit denen geht.
 

TimeIsTheKey

Aktives Mitglied
Ich verstehe nicht, was Du mit "JLabel" meinst. Erklär mal.
Du kannst Dir auch im Internet andere Bilder mit Transparenz besorgen und mal schauen, ob es mit denen geht.

So mache ich es mit einer Klasse die von JLabel erbt:
Code:
import java.awt.*;
import java.awt.image.BufferedImage;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Sprite extends JLabel{
	private ImageIcon icon;
	int x,y,positionx,positiony,collisionW,collisionH;
	String name;
	boolean solid;
	
	
	public Sprite(String name,String path, ImageIcon icon, int x, int y, boolean solid) {
		super(icon);
		this.icon = icon;
		this.x = x;
		this.y = y;
		this.positionx = 0;
		this.positiony = 0;
		this.name = name;
		this.solid = solid;
		this.setSize(icon.getIconWidth(), icon.getIconHeight());
	}
	
	public void replace(){
		
	}
	
	public int getImgX(){
		return x;
	}
	
	public void setImgX(int x){
		this.x = x;
	}
	
	public int getImgY(){
		return y;
	}
	
	public void setImgY(int y){
		this.y = y;
	}
	
	public int getPImgX(){
		return positionx;
	}
	
	public void setPImgX(int x){
		this.positionx = x;
	}
	
	public int getPImgY(){
		return positiony;
	}
	
	public void setPImgY(int y){
		this.positiony = y;
	}
	
	public int getImageH(){
		return icon.getIconHeight();
	}
	
	public int getImageW(){
		return icon.getIconWidth();
	}
	
	public String getNameImg(){
		return this.name;
	}

}

Hier meine andere Klasse mit JPanel:

Code:
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

public class JImagePanel2 extends JPanel{
	private BufferedImage image;
	int x, y;
	int positionx,positiony;
	String name;
	
	public JImagePanel2(String name,BufferedImage image, int x, int y) {
		super();
		this.image = image;
		this.x = x;
		this.y = y;
		this.name = name;
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawImage(image, x, y, null);
	}
	
	public int getImgX(){
		return x;
	}
	
	public int getImgY(){
		return y;
	}
	
	public int getPImgX(){
		return positionx;
	}
	
	public int getPImgY(){
		return positiony;
	}
	
	public void setPImgX(int x){
		this.positionx = x;
	}
	
	public void setPImgY(int y){
		this.positiony = y;
	}
	
	public int getImageH(){
		return image.getHeight();
	}
	
	public int getImageW(){
		return image.getWidth();
	}
	
	public String getNameImg(){
		return this.name;
	}

}

Entschuldigung für die Verwirrung.
 

Marco13

Top Contributor
Mach mal direkt nachdem du das Bild eingelesen hast ein
System.out.println(dasBufferedImage);
Dort gibt er dann einen langen, kryptischen String aus. Aber es stehen evtl. interessante Sachen drin.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Transparente Hintergrundfarbe eines Applets Java Basics - Anfänger-Themen 8
P Transparente Images Java Basics - Anfänger-Themen 5
W Transparente JComonents? Java Basics - Anfänger-Themen 3
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
W Java in Exe Datei umgewandelt, Ressourcen fehlen (Bilder und Audiodateien) Java Basics - Anfänger-Themen 1
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
S Bilder zoomen Java Basics - Anfänger-Themen 0
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
x-tshainge Java Bilder einfügen Java Basics - Anfänger-Themen 1
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Bilder werden nicht angezeigt! Java Basics - Anfänger-Themen 6
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
M Bilder in .Jar exportieren Java Basics - Anfänger-Themen 2
T Bilder in ausführbarer Jar Java Basics - Anfänger-Themen 11
F 2 wechselnde Bilder Java Basics - Anfänger-Themen 4
D Verzögerung des Erscheinens der Bilder Java Basics - Anfänger-Themen 5
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
F Bilder aus jar einlesen Java Basics - Anfänger-Themen 10
J Bilder in Labels aktualisieren Java Basics - Anfänger-Themen 2
T jpeg Bilder zoomen.. Java Basics - Anfänger-Themen 2
C Bilder von Festplatte in Programm hochladen Java Basics - Anfänger-Themen 6
S Wo speicher ich bilder und sounds ab? Java Basics - Anfänger-Themen 4
C Threads Threaded Bilder bearbeiten Java Basics - Anfänger-Themen 8
K Bilder mit Eclipse exportieren Java Basics - Anfänger-Themen 1
J Slideshow zeigt bilder nicht an Java Basics - Anfänger-Themen 3
R Bilder aus Array als anklickbare Objekte Java Basics - Anfänger-Themen 3
K Export nach Jar mit Bilder Java Basics - Anfänger-Themen 2
L Wie bette ich Bilder in eine .jar ein? Java Basics - Anfänger-Themen 4
C Pfad für Bilder angeben Java Basics - Anfänger-Themen 11
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
E ImageJ mehrere Bilder hintereinander bearteiten Java Basics - Anfänger-Themen 2
E HILFE Projekt für die Schule--> Bilder einfügen Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
H Bilder ohne Verlust speichern Java Basics - Anfänger-Themen 2
J Ladebalken anzeigen während Bilder geladen werden Java Basics - Anfänger-Themen 2
R Bilder positionieren Java Basics - Anfänger-Themen 5
D Erstellte Jar datei zeigt keine Bilder an Java Basics - Anfänger-Themen 5
4 4kb bilder Java Basics - Anfänger-Themen 5
Q Pfadangabe für zu speichernde Bilder Java Basics - Anfänger-Themen 2
B Bilder speichern (jpg, gif, jpg) Java Basics - Anfänger-Themen 4
S Bilder einladen Java Basics - Anfänger-Themen 26
B Aus einem Eclipse Projekt eine .jar - keine Bilder drin Java Basics - Anfänger-Themen 7
H Bilder im GUI einfügen Java Basics - Anfänger-Themen 12
G Bilder in Jar anzeigen lassen Java Basics - Anfänger-Themen 23
T Bilder in der jar-datei Java Basics - Anfänger-Themen 10
H Zahlen Bilder zuordnen möglich? Java Basics - Anfänger-Themen 4
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
J Bilder von Objekten Java Basics - Anfänger-Themen 3
A Bilder in Eclipse speichern Java Basics - Anfänger-Themen 7
J Mit JS, Text und Bilder von Webseite verändern... Java Basics - Anfänger-Themen 10
S Input/Output Text und Bilder laden Java Basics - Anfänger-Themen 5
T Bilder werden in Jar nicht geladen Java Basics - Anfänger-Themen 10
S Java Web Start lädt keine Bilder Java Basics - Anfänger-Themen 2
T Buttons (auf denen bilder sind) random vertauschen Java Basics - Anfänger-Themen 11
D Bilder Laden, mit Eclipse ok, .jar nicht Java Basics - Anfänger-Themen 5
F Bilder aus .jar datei laden Java Basics - Anfänger-Themen 1
M Applet soll Bilder aus Ordner lesen Java Basics - Anfänger-Themen 9
F Bilder enfügen und Bewegen Java Basics - Anfänger-Themen 6
I Drehbare bilder in 3D Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
T JTextPane - setText kein kein neuladen der Bilder? Java Basics - Anfänger-Themen 8
A Bilder in Eclipse Java Basics - Anfänger-Themen 8
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
N Bilder Objekten zuweisen Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
N jar kann Bilder nicht finden(?) Java Basics - Anfänger-Themen 4
S Spiel automat -Bilder vergleichen Java Basics - Anfänger-Themen 3
R Gif Bilder flimmern Java Basics - Anfänger-Themen 10
P Signiertes JAR aber keine Bilder o0 Java Basics - Anfänger-Themen 6
S Bilder der Diashow werden in anderen Bildern angezeigt Java Basics - Anfänger-Themen 3
G Bilder aus dem Projekt Verzeichnis werden n. angezeigt Java Basics - Anfänger-Themen 7
C Bilder von Server zu Server kopieren über Webdav(Sardine) Java Basics - Anfänger-Themen 5
K Bilder "langsam" laden Java Basics - Anfänger-Themen 4
FreddyStepp Bilder zusammenfügen Java Basics - Anfänger-Themen 7
B GUI-Bilder einfügen Java Basics - Anfänger-Themen 40
S Bilder vergleichen Java Basics - Anfänger-Themen 6
B Kann man im Thread Bilder laden? Java Basics - Anfänger-Themen 8
S Wo speichere ich Bilder für Applets (Netbeans) Java Basics - Anfänger-Themen 5
J Mehrere Bilder laden Java Basics - Anfänger-Themen 6
D Bilder einfügen Java Basics - Anfänger-Themen 8
W Bilder einfügen? Java Basics - Anfänger-Themen 2
S Mehrere Bilder bewegen Java Basics - Anfänger-Themen 5
B Bilder zeichnen Java Basics - Anfänger-Themen 2
D Bilder in JFrame laden Java Basics - Anfänger-Themen 8
L Frage bzgl. Threads beim Bilder laden Java Basics - Anfänger-Themen 3
S Bilder in AWT Java Basics - Anfänger-Themen 7
J java applets bilder? Java Basics - Anfänger-Themen 11
manunana89 Bilder auf JFrame/beste Möglichkeit??? Java Basics - Anfänger-Themen 5
K Bilder werden nicht angeziegt !!! Java Basics - Anfänger-Themen 2
max56 Bilder ausgeben Java Basics - Anfänger-Themen 21
K Bilder/Dateien aus package einlesen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben