Transparentes Control über DirectX Video legen

Christian Kusmanow

Erfahrenes Mitglied
Hallo Tutorialer!

Ich hab ein echt fieses Problem. :(
Es geht um einen Layer
( Transparentes Control mit einem GIF und hineingezeichneten Text ).
Wenn ich darunter in einem Panel ein Video abspiele, wird der Inhalt meines Layers gelöscht.

Warum verhält sich das so und wie kann ich das berwerkstelligen,
dass die Sachen permanent angezeigt werden?
Ich hab schon an einen Timer gedacht der das Control permanent aktualisiert. :suspekt:
Ist es denn die einzige Möglichkeit? Ich bezweifle stark, dass das so sauber zu bewerkstelligen ist.

Ich hab mal ein TestProjekt angefügt wo man dieses Verhalten einfach nachvollziehen kann,
auch für Neugierige.

Klickt bitte in den Rand des Forms wenn ihr ein Video öffnen möchtet,
den Rest verdeckt ja der Layer. ;)
Ich hab das Klick-Event des Layer aboniert und löse darin das neuzeichnen aus.
Dann wird für einen kurzen Moment der Inhalt das Layers angezeigt.

Wenn ihr das DirectX SDK noch nicht installiert habt,
müsst ihr das mdxredist.msi Paket installieren,
welches ihr in der ManagedDX.CAB vom DirectX9c findet.


MfG, cosmo

//Edit: Anhang befindet sich jetzt weiter unten Thread
 
Zuletzt bearbeitet:
Jo mei, dann bau dir halt einfach einen Timer in dein Control rein und fertig ist die Gschichte ;-) Funktioniert und macht wenig Troubles, frießt auch nicht wirklich viel Ressourcen.

Noch eine Geschichte: Auf deine Art gibst du ja den Speicher nie frei, auch nicht so bsonders ;-)
 
Norbert Eder hat gesagt.:
Jo mei, dann bau dir halt einfach einen Timer in dein Control rein und fertig ist die Gschichte ;-) Funktioniert und macht wenig Troubles, frießt auch nicht wirklich viel Ressourcen.
:eek: So simpel? Ok, mach ich. Danke
Norbert Eder hat gesagt.:
Noch eine Geschichte: Auf deine Art gibst du ja den Speicher nie frei, auch nicht so bsonders ;-)
OMG das Dispose im MainForm fehlt ja. :-(
Habs anscheinend versehentlich gelöscht :-(
//Edit: Das Video der Layer und den OpenFileDialog meinst jetzt sicher.
Ich bau den Timer ein und poste mal das neue Projekt.

P.S.: Da stand aber noch mehr in der PN...
 
Zuletzt bearbeitet:
Meine nicht sehr schöne aber durchaus funktionierende Variante findest im Anhang ... den Dispose-Geschichte hab ich erst nacher gesehen und daher nicht geändert.
 

Anhänge

  • TransparentVideoLayer.zip
    55,3 KB · Aufrufe: 58
Kurz nachdem Du gepostet hattest hab ichs fertig bekommen.
mit dem gleichen Ergebnis wie bei Dir.
Es Flackert. Ich denke das mir auch das das Dubblebuffering oder das TextCaching nicht weiter hilft.
  1. Hab ich die Resurcen jetzt richtig bereinigt?
  2. Hast eine andere Idee wie man das realisieren kann oder ob das überhaupt geht.
Ich danke Dir für deine Mühen. :)

//Edit: Anhang befindet sich jetzt weiter unten Thread
 
Zuletzt bearbeitet:
Statt Refresh würd ich eher Invalidate verwenden, aber im Grunde egal. Bei mir flackerts so oder so nicht, ausser die Grafik liegt über dem Blackborder vom Video.

An deiner Stelle würd ich das sowieso gleich über das MediaPlayer Control abspielen. Mit DirectX handelst dir noch ein paar weitere Probleme ein ..
 
Norbert Eder hat gesagt.:
Bei mir flackerts so oder so nicht, ausser die Grafik liegt über dem Blackborder vom Video.
Wie meinst das, geht das etwa bei Dir? Warum bei mir nicht? :(
Der Layer muss über dem Video liegen. Es sollen best, Dinge eingeblendet werden...
Norbert Eder hat gesagt.:
An deiner Stelle würd ich das sowieso gleich über das MediaPlayer Control abspielen. Mit DirectX handelst dir noch ein paar weitere Probleme ein ..
Genau gesagt mach ich's mit DirectShow (DX8). :p
Der effekt ist aber der gleiche. Hab DirectX nur für hier zum Testen hergenommen
und damit ich meinen DSWrapper nicht preisgeben muss. ;)

Hast Du gute Links für mich, wo die Vor- und Nachteile von DX und WMP behandelt werden? :)
 

Anhänge

  • TransparentVideoLayerTest.zip
    57 KB · Aufrufe: 39
Zuletzt bearbeitet:
Also ich verwend DirectX 9, und zwar die absolut letzte Version ... ist glaub ich Dezember wenns mich nicht täuscht. Da flackerts gar net, ausser wie gesagt, wenn dein Video nicht genau in die Form eingepasst ist und so der Blackborder rauskommt. Dort flackerts wie wild.

Links? Pfuh, schwierig, ich kämpf grad selber mit DirectX und dem Message-Loop .. *grrr*
 
Norbert Eder hat gesagt.:
[...] ausser wie gesagt, wenn dein Video nicht genau in die Form eingepasst ist und so der Blackborder rauskommt. Dort flackerts wie wild.
:confused: Tut mir leid, vielleicht steh ich grad auf dem Schlauch oder so. :-(
Was meinst Du mit eingepasst?
//Edit: Und was meinst mit Blackborder. Kann jetzt nichts darunter vorstellen. :-(
Kannst Mir das mal bitte so herrichten damit ich mir das mal anschauen kann?
Dein zuletzt gepostetes flackert ja... Es ist wichtig.
Norbert Eder hat gesagt.:
Links? Pfuh, schwierig, ich kämpf grad selber mit DirectX und dem Message-Loop .. *grrr*
Ok, ich warte :rolleyes: :D
Nicht eine Diskussion? Woher weisst sonst davon?
//Edit: Möcht gern wissen was für Probleme ich mir noch einhandeln könnte. :confused:
 
Zuletzt bearbeitet:
Guten Morgen!

Ich hab gestern mal was ausprobiert. Dazu hab ich einfach den TrasparencyKey des Forms
auf KnownColor.Control eingestellt. Dann hab ich ein Video abspielen lassen
und das Form über verschiedene MediaPlayer bewegt.
Der einzige bei dem es nicht geflackert hat war der WMP. ;-)
Um sicher zu gehen müsst ichs mal direkt mit dem WMP Control versuchen...

Aber vorweg hab ich noch eine Frage, Norbert:
Die System-Vorraussetzungen der Software sollten mind. Win98 sein.
Der WMP10 funktioniert aber nicht unter XP SP2 :suspekt:
Ich hab noch nie mit dem WMP Control gearbeitet und frage mich
wie ich das jetzt für dem WMP 9 hin bekomm.

Mir die einfach die 9er dll schnappen? Was passiert dann auf einem System mit dem WMP 10?
Muss ich die WMP-Version bestimmen und 2 verschiedene DLL's verwalten? :confused:
 

Neue Beiträge

Zurück