Transparentes Image -> getGraphics

Status
Nicht offen für weitere Antworten.

Kr0e

Gesperrter Benutzer
Hi,
ich will ganz gerne ein Image benutzen, um dann mit getGraphics auf diesem Image mit Java2D zu zeichnen.
An sich eine recht einfache Sache die soweit auch funktioniert. Aber nun möchte ich praktisch 2 Images überlagern...
Dafür muss ich wissen, wie ich bei meinem 2ten Image z.b. die Farbe weiß transparent machen kann, da sonst das 1te Image komplett überzeichnet wird....

Ich hoffe ihr habt ne Idee!

Gruß Chris
 

Schandro

Top Contributor
Wie instanzierst du den dein Image?

Wenn du es mit BufferedImages machst:
Beim erstellen gibts du als typ BufferedImage.TYPE_INT_ARGB an

Das Graphics Object bekommst du mit createGraphics();

Dann setzt du die Farbe z.b. auf new Color(120,120,120,120)
Das ist ein halbdurchsichtiges Grau, der letzte wert ist der alpha Wert und gibt den Grad der dursichtigkeit an....
 

Kr0e

Gesperrter Benutzer
Hi,
danke erstmal für die Antwort...
Ich erstelle das Image mit Hilfe der createImage Methode... Ich leite von einem JFrame ab und habe somit einen "realen" Grafikkontext... Kann man diese Methode die du grad genannt hast evt. iwie auch dort anwenden ?

Gruß Chris
 

Kr0e

Gesperrter Benutzer
Da fällt mir noch was ein....
Ich hab mich falsch ausgedrückt... ich will gerne eine bestimmte Farbe als transparent setzen. Aber der Grund warum ich überhaupt Images benutze ist folgender:
Ich zeichne ein kariertes Muster mit Java2D... Ich dachte mir ich zeichne es einmal auf ein Image und dann zeichne ich immer nur das Image neu... Aber langsam fang ich an zu zweifeln ob das überhaupt ein Geschwindigkeitsvorteil bringt... Ich zeichne 200 Linien.... Was geht eurer Meinung nach schneller ? 200 Linien oder ein Image ?

Gruß Chris
 

Kr0e

Gesperrter Benutzer
Ok, alle 33 ms ein normales Image und ein BufferedImage zeichnen dauert solange, dass meine CPU zu 100% ausgelastet ist... entweder ich mach was falsch oder das ist wirklich so langsam... Wird ein Image quasi Pixel-für-Pixel gezeichnet ? Ich hatte gehofft, dass Images so sind wie bei OpenGL Displaylisten :D Also das ganze beschleunigt... Aber wenn das derart verlangsamt wird bei 2 Images, hat das natürlich keinen Sinn... Vlt. ist ja Java3D schneller (Hardwarebeschleunigung oder ?)

Gruß Chris
 

Schandro

Top Contributor
warum benutzt du "createImage" wenn du ein Image vorrendern willst, um es dann später einfach nur in paintComponents malen zu können?

Hier mal ein Beispielcode mit eingebauten Performancetest, bei mir läuft beides ungefähr gleichschnell. Vllt hab ich ja zuffälig den Schwellenwert getroffen
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.io.*;

public class XXX{

    public static void main(String[] args){
        new XXX();}


    private JFrame window = new JFrame();
    private BufferedImage img;

    public XXX(){
        window.setBounds(100,100,400,400);

        window.add(panel);

        // erstellt das vorgerenderte Image
        img = new BufferedImage(400,200,BufferedImage.TYPE_INT_ARGB);
        Graphics g = img.createGraphics();
        g.setColor(new Color(255,255,255,0));
        g.fillRect(0,0,400,200);
        g.setColor(Color.BLACK);
        drawLines(g);

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
        });
    }


    JPanel panel = new JPanel(){
        public void paintComponent(Graphics g){
            super.paintComponent(g);

            // weiterer Stuff
            g.setColor(Color.RED);
            g.drawOval(0,0,400,200);

            float startTime = System.nanoTime();

            // damit auch eine große Zahl rauskommt, wird der Aufruf ein paar mal aufgerufen...
            for(int i=0;i<999;++i){

                // immer eine der beiden Möglichkeiten auskommentieren

                // Möglichkeit 1
                //drawLines(g);

                //Möglichkeit 2:
                g.drawImage(img,0,0,null);
            }

            System.out.println(System.nanoTime()-startTime);
        }
    };

    public void drawLines(Graphics g){
        for(int i=0;i<200;++i){
            g.drawLine(i*2,0,i*2,200);
        }
    }

}
 
Zuletzt bearbeitet:

Kr0e

Gesperrter Benutzer
Also ich benutze DoubleBuffering um das flackern beim Neuzeichnen wegzubekommen...
Außerdem benutze ich einen Timer und lasse alle 33 ms neuzeichnen... Aber bei mir sind es dann 100 % auslastung...
Liegt das vlt. an Ubuntu bzw. an der Implementierung von Java unter Linux ? Weil das Gleiche läuft auf meinem anderen PC mit Windows ohne Probleme... (Vergleichbare Prozessoren und jeweils die neuste Javaversion)
Vlt. sollte ich lieber ne Grafiklib nutzen...

Danke für den Test ;)

Gruß Chris
 
G

Gast2

Gast
Swing hat schon DoubleBuffering musst nicht selber machen...
2 Bilder sollten kein Problem sein, außer sie sind ewig groß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
D Transparentes Hauptfenster Events AWT, Swing, JavaFX & SWT 1
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
X Transparentes Overlay AWT, Swing, JavaFX & SWT 3
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
B Swing Transparentes JPanel, Schrift verschmiert AWT, Swing, JavaFX & SWT 22
S Fix für transparentes Systemtray? AWT, Swing, JavaFX & SWT 6
D Transparentes JFrame mit inhalt AWT, Swing, JavaFX & SWT 7
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
F Transparentes BufferedImage über BufferedImage AWT, Swing, JavaFX & SWT 12
0 Transparentes Panel ohne Rahmen AWT, Swing, JavaFX & SWT 5
S Transparentes JPanel auf einem JimiCanvas AWT, Swing, JavaFX & SWT 2
G transparentes Fenster + Speicherverbrauch AWT, Swing, JavaFX & SWT 3
K Popup Deluxe (Transparentes Popup)! AWT, Swing, JavaFX & SWT 8
P Transparentes Window/JFrame (mit SkinLF?) AWT, Swing, JavaFX & SWT 10
M Transparentes gif als extra Klasse auf einen JFrame zeichen AWT, Swing, JavaFX & SWT 17
MiMa Speichern von Image als JPG auf Festplatte AWT, Swing, JavaFX & SWT 9
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21

Ähnliche Java Themen


Oben