Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Image über Mediaplayer-Fenster (https://www.delphipraxis.net/62732-image-ueber-mediaplayer-fenster.html)

DelphiN00b 8. Feb 2006 17:57


Image über Mediaplayer-Fenster
 
Hm, trotz intensiver Suche (vielleicht ja auch einfach mit den falschen Begriffen) habe ich nichts gefunden was mir auch nur ansatzweise weitergeholfen hätte... :gruebel:

Ich möchte einen Film abspielen (kein Problem) - vor diesen Film möchte ich jedoch eine Maske legen (am Besten in Form eines Bitmaps bzw. transparenten Gifs). Das Ganze könnte dann Beispielsweise wie ein Video durch ein Fernglas betrachtet aussehen.
Leider scheiterten meine Versuche bisher daran, daß es anscheinend nicht möglich ist ein Bitmap VOR ein Mediaplayer Panel zu legen.
Die nächsten Versuche das Video anstelle eines Panels gleich in einem Shape abspielen zu lassen scheiterten ebenfalls kläglich. Buttons und einige andere Objekte kann man vor ein Video legen, leider hab ich da bisher keins gefunden, was ich in der Form verändern könnte und zudem noch wenigstens teilweise transparent gestalten könnte.

Für jegliche Anregungen bin ich sehr dankbar.

Gruß

turboPASCAL 8. Feb 2006 18:05

Re: Image über Mediaplayer-Fenster
 
Also ein Panel ist schon eine gute Wahl um darauf ein Video wiederzugeben. Versuch doch einmal eine andere Form als CreateParented (oder mit SetParent) mit Transparenz darüberzulegen.
Ist jetzt nur eine Idee, kann aber nicht sagen ob sich das mit der Overlaydarstellung des Videos verträgt.

DelphiN00b 8. Feb 2006 19:09

Re: Image über Mediaplayer-Fenster
 
Erstmal herzlichen Dank für die schnelle Antwort, hab es gleich mal ausprobiert, leider ist selbst die mit CreateParented erstellte Form nicht "über" dem eigentlichen Video-Panel, aufgefallen ist mir dabei jedoch, daß die Mediaplayer-Komponente, auch wenn außerhalb plaziert immer über dem eigentlichen Video liegt, jetzt müsste ich nur irgendwie die Komponente als Parent und das entsprechende Panel (Videofenster) als alignClient für meine Maske definieren können - wie das aber funktionieren soll weiß ich nicht :cry:

Delphi-Freak 8. Feb 2006 19:17

Re: Image über Mediaplayer-Fenster
 
So ein Video wird ja im Normalfall mit Overlay wiedergegeben; dazu wird eigentlich das Anzeige-Panel fast schwarz (eben nicht ganz schwarz) gefärbt und das Video auf diese Position gesetzt, d. h. in diesem Bereich dort angezeigt, wo das Panel diese fast schwarze Farbe hat. Jetzt könntest du dir das zu Nutzen machen und deine Maske, z. B. eine Bitmap in ein Panel darüber hineingeben und dieses Fast-Schwarz als deine "transparente" Farbe verwenden.
Es ist keine sehr elegante Methode, und sobald kein Overlay verwendet wird funktioniert sie nicht mehr, aber soweit sollte sie schon gehen...

LG, ich

DelphiN00b 8. Feb 2006 19:26

Re: Image über Mediaplayer-Fenster
 
Jetzt steh ich glaub ich auf dem Schlauch...

Versteh nicht ganz was das bringen soll - hab aber wahrscheinlich das Design dabei nicht begriffen...
Ich hab ein Panel in dem das Video läuft, mach ein neues Panel darüber, setze in das neue Panel eine Bitmap und mach die transparent. Wenn ich jetzt nicht ganz dumm bin sehe ich durch die Bitmap mein neues Panel, nicht jedoch mein Video, oder sehe ich da irgendwas falsch?! Denn ein Panel hat doch kein Alphablending...

Delphi-Freak 8. Feb 2006 19:36

Re: Image über Mediaplayer-Fenster
 
Das stimmt schon; ich meine auch nicht, dass du die Bitmap direkt transparent machst, sondern dass du in der Bitmap unter anderem dieses Fast-Schwarz verwendest, überall dort, wo du möchtest, dass das Video angezeigt wird.
Dazu probiert vlt. folgendes: Spiel ein Video so ab und pausiere es dann, mach einen Screenshot mit der Druck-Taste und öffne den z. B. in Paint; dein Programm mit dem pausierten Video ist noch immer offen. Jetzt wirst du im Paint wahrscheinlich dein Video sehen, vlt. etwas nach links und oben versetzt. Dann schließ dein Programm und im Paint siehst du dort, wo das Video ursprünglich war nur mehr eine fast schwarze Fläche.
Das bedeutet also, wenn man das Ganze etwas veranschaulicht: Dein Programm sagt der Grafikkarte, sie soll in diesem bestimmten Bereich das Video anzeigen, aber nur dort, wo die Pixel dieses Fast-Schwarz haben.

Ich hoffe, ich habe mich jetzt etwas besser verständlich ausgedrückt.

LG, ich

DelphiN00b 8. Feb 2006 19:49

Re: Image über Mediaplayer-Fenster
 
Ich habs zwar entweder immernoch nicht verstanden, aber ich hab's mal so gemacht wie beschrieben...

Videopanel <- Panel auf dem Video abgespielt wird

-> Panel1 = Panel, das auf dem Videopanel liegt
-> Image1 = TImage, das auf Panel1 liegt.

Bereich von Image1 Transparent gemacht, ok und was sehe ich? Panel1 und nicht das Videopanel, deshalb meinte ich vorhin das Panels kein Alphablending haben...


Oder hab ich doch was falsch verstanden?

SirThornberry 8. Feb 2006 19:55

Re: Image über Mediaplayer-Fenster
 
Also da das ganze mit Overlay geht wird das mit über dem panel liegen nicht klappen. Was aber auf jeden fall funktioniert (gerade probiert) ist das du das Panel wo das Video drauf angezeigt wird mit "SetWindowRgn" entsprechend eine form zuweist.

So kannst du zum Beispiel ein kleines Viereck an der Oberseite rausschneiden. (und somit sieht man was unter dem Panel dort liegt:
Delphi-Quellcode:
var LReg: Cardinal;
    LPoints: Array of TPoint;
begin
  SetLength(LPoints, 9);
  LPoints[0] := Point(0, 0);
  LPoints[1] := Point(40, 0);
  LPoints[2] := Point(40, 40);
  LPoints[3] := Point(80, 40);
  LPoints[4] := Point(80, 0);
  LPoints[5] := Point(Panel1.Width, 0);
  LPoints[6] := Point(Panel1.Width, Panel1.Height);
  LPoints[7] := Point(0, Panel1.Height);
  LPoints[8] := Point(0, 0);
  LReg := CreatePolygonRgn(LPoints[0], Length(LPoints), WINDING);
  SetWindowRgn(Panel1.Handle, LReg, True);
  DeleteObject(LReg);

DelphiN00b 8. Feb 2006 20:07

Re: Image über Mediaplayer-Fenster
 
Wow, danke - eine echte Großmeister-Antwort :)

Funktioniert einwandfrei, jetzt mach ich mir noch ein Paar Gedanken wie ich das Ganze noch rund bekomme und schon bin ich zufrieden

Herzlichen dank!

SirThornberry 8. Feb 2006 20:09

Re: Image über Mediaplayer-Fenster
 
rund gehts so:
Delphi-Quellcode:
var LReg1, LReg2: Cardinal;
begin
  LReg1 := CreateEllipticRgn(0, 0, Panel1.Width div 2, Panel1.Height);
  LReg2 := CreateEllipticRgn(Panel1.Width div 2, 0, Panel1.Width, Panel1.Height);
  CombineRgn(LReg1, LReg1, LReg2, RGN_OR);
  SetWindowRgn(Panel1.Handle, LReg1, True);
  DeleteObject(LReg1);
  DeleteObject(LReg2);


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz