Transparenz mit SWT

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hallo zusammen,

ich sitz vor einem etwas doofen Problem:

Unsere Java-Anwendung soll über ein ActiveX-Control welches ich gerade schreibe, Videostreams anzeigen. Mittels SWT wird dieses Control geladen in als OleControlSite in einem OleFrame in der Anwendung angezeigt. Das funktioniert schon prima.

Jetzt geht's aber drum, dass man "Overlays" auf das Video setzen kann. Im Prinzip nix wildes. Der DirectShow Videorenderer kann ein Bitmap als Overlay über das Video legen. Auch mit Transparenz und Alpha-Transparenz.

Damit sollen z.B. die Namen der Videoquellen über das Video gelegt werden können.

Da man mit den Overays aber von Java aus noch interagieren können soll, sehe ich da das eine oder andere Problem:

Zum einen muss ich auf ActiveX Seite Mausevents abfangen und an Java/SWT weiterleiten und vor allem noch "herausfinden" auf welches Overlay (es kann durchaus mehrere auf einem Video geben) geklickt wurde.

Die Dokumentation seitens Visual C++ etc. ist ziemlich sch**sse, da es offensichtlich kaum Leute gibt die so tief unten auf dem VideoRenderer arbeiten.

Also hab ich mir gedacht: Wieso macht man das mit den Overlays nicht von Java aus? SWT müsste ja transparenz können, so dass ich sozusagen mittels Null-Layout einzelne Composites (oder so, kenn mich in SWT noch nicht so aus) auf das Video platziere. Prinzipiell geht das auch schon. Denn das war die bisherige vorgehensweise. Nun sollen diese Overlays (welche Text und/oder Bilder enthalten können) aber einen Transparenten Hintergrund haben können (als Option auch einen farbigen), und das ganze Overlay an sich soll später auch noch Alphatransparenz können (man soll durch den Text/das Bild hindurch das darunterliegende Video sehen können).

Nun meine Frage an die SWT-Spezis hier:

LÄsst sich das mit SWT realisieren? Gibts Codeschnipsel für die Transparenzgeschichte (hab jetzt noch nix wirkliches gefunden).

Weil wenn das ganze in Java machbar ist, dann wäre das wohl schneller und geschickter zu realisieren, wie wenn ich das unten auf dem Renderer des DirectShow Graphen mache und von da aus auch noch Mausevents weiterriechen und steuern muss.

- Alex
 

Wildcard

Top Contributor
Eine SWT Shell hat keinen Alphakanal sondern nur Bitmasken Ttransparenz. Was du dann auf dieser Shell zeichnest, kann natürlich transparent sein, aber das wird dir wohl nichts nützen.
 
T

tuxedo

Gast
Also würde alles bis auf Alphatransparenz funktionieren? D.h. ich kann einen Text auf das Video-Control zeichnen und den Texthintergrund so transparent halten dass ich das darunterliegende Video sehe?

- Alex
 

Wildcard

Top Contributor
Ist das Video denn ein SWT Widget, also sind Overlay und Video in der gleichen SWT Shell enthalten?
 
T

tuxedo

Gast
Wildcard hat gesagt.:
Ist das Video denn ein SWT Widget, also sind Overlay und Video in der gleichen SWT Shell enthalten?

Hmm, da frägst du mich jetzt was. Bin mit SWT noch nicht so ganz vertraut. Muss ich eben mal in den Code schauen *mom*


Jupp. Overlay und Video müssten in der gleichen Shell sein. Macht das einen Unterschied?

@byto
Danke für den Link. Ich geh dann mal gucken ...

- Alex
 
T

tuxedo

Gast
Also ich hab jetzt ein wenig gespielt und gebastelt:

Code:
Composite c = new Composite(sShell, SWT.NONE);
        c.setBounds(new Rectangle(576, 327, 180, 180));
        
        c.addPaintListener(new PaintListener(){

            public void paintControl (PaintEvent e)
            {
                e.gc.setForeground(new Color(sShell.getDisplay(),255,0,0));
                e.gc.drawLine(0,0,180,180);
                
                
            }
            
        });

Ich hab ein Shell mit Null-Layout in dem ich mein OleFrame, welches mein "OleControlSite" (also mein VideoControl) beinhaltet, platziert habe.

Dazu hab ich noch obiges Composite hinzugefügt. Von der Reihenfolge her liegt das Composite "über" dem OleFrame.

So. Laut Doku die ich im Netz gefunden habe, kann man die Childs einer Komponente mit "setBackgroundMode(SWT.INHERIT_DEFAULT);" dazu bringen, den selben Hintergrund wie das Parent anzunehmen. Man erreicht dadurch also die Transparenz. Prima.

Ich hab also meiner Shell einen weißen Hintergrund gegeben und das Composite wie oben gezeigt eingebaut. Das Composite hat den selben weißen Hintergrund wie mein Shell und die rote Linie wird auchgezeichnet.

Lasse ich das "setBackgroundMode", welches ich auf das Shell angewendet habe weg, so wird der Hintergrund meines Composites wieder grau. Alles bestens.

So, wenn ich ich jetzt das Composite beim Erzeugen nicht an mein Shell knüpfe, sondern wahlweise an mein OleFrame oder an mein OleControlSite (hab beides ausprobiert), dann funktioniert das nicht mehr. Es scheint so als würde mein ActiveX Control immer zuletzt gezeichnet, womit ich dann alles, was ich damit sonst noch verknüpft habe (also mein Test-Composite), übermale.
Ich hab testweise das Video erst gar nicht laufen lassen, sondern nur mal einen schwarzen Hintergrund im ActiveX Control (also auf C++ Seite) gemalt. Auch das reicht schon aus um das Composite auf Java-Seite zu verdecken.

Das ist nicht gut. So wie's aussieht werde ich nicht drum rum kommen das ganze mit dem Overlay auf C++ Seite zu machen. Schade.

Oder hat noch jemand ne brilliante Idee die ich testen könnte?

- Alex
 
T

tuxedo

Gast
So, auf C++ Ebene geht's auch nicht besser. Dort dominiert das Zeichnen des Videos ebenfalls. Und auch auf Video-Renderer-Ebene gibts Probleme. Dort klappt zwar das mit der Transparenz, aber mein Overlay, bzw. der Text lässt sich nicht in einer gleichbleibenden Größe bei sich ändernder Darstellungsgröße auf dem Video darstellen.

Wenns also mit SWT keine Lösung gibt, dann war's das erstmal mit Transparenz...

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
B Bild bearbeiten mit Transparenz (spiegeln, Farben austauschen) AWT, Swing, JavaFX & SWT 8
S Images färben und transparenz ändern AWT, Swing, JavaFX & SWT 4
Luk10 Transparenz von ARGB ints AWT, Swing, JavaFX & SWT 5
C Java2D Transparenz geht bei einfärben verloren AWT, Swing, JavaFX & SWT 7
B Swing Cursor-Transparenz AWT, Swing, JavaFX & SWT 2
C 2D Simulation möglichst effizient (ggf. Transparenz) AWT, Swing, JavaFX & SWT 23
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
R Transparenz AWT, Swing, JavaFX & SWT 21
O Transparenz mit AWTUtilities aber nur das Fenster nicht die Buttons AWT, Swing, JavaFX & SWT 8
R Transparenz mit AWTUtilities AWT, Swing, JavaFX & SWT 6
J Swing Transparenz bei Swingelementen AWT, Swing, JavaFX & SWT 2
V [SWT] Shell transparenz AWT, Swing, JavaFX & SWT 3
T Pseudo-Transparenz für Applets -> Background grabben AWT, Swing, JavaFX & SWT 15
H Einzelne Pixel auf Transparenz überprüfen? AWT, Swing, JavaFX & SWT 3
D Label und Transparenz . AWT, Swing, JavaFX & SWT 4
T Transparenz bei Graphics AWT, Swing, JavaFX & SWT 9
P 2 Probleme mit Panel: index setzten und transparenz AWT, Swing, JavaFX & SWT 4
A Transparenz ? AWT, Swing, JavaFX & SWT 13
E transparenz (alpha) - komisches aussehen von textfeldern! AWT, Swing, JavaFX & SWT 2
L Transparenz Problem mit verschiebung AWT, Swing, JavaFX & SWT 8
G png und Transparenz AWT, Swing, JavaFX & SWT 4
F JWindow mit einem Bild und Transparenz AWT, Swing, JavaFX & SWT 4
F Problem mit Transparenz, MouseEvents und Performance AWT, Swing, JavaFX & SWT 3
M Hintergrundbild und grafischer Button (Transparenz Probleme) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben