Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#4

Re: TMediaPlayer - Video in Vollbild anzeigen

  Alt 8. Mai 2008, 11:31
Hi,

Delphi-Quellcode:
//MediaPlayer.DisplayRect := Rect(links, oben, rechts, unten);
MediaPlayer.DisplayRect := Rect(0, 0, Panel.Width, Panel.Height);
Sollte eigentlich klappen.

Wenn es nicht verzerren sollte, musst du natürlich ein wenig rumrechnen. Ich hab es mal so gemacht:

Delphi-Quellcode:
//MCIAnzeige ist mein Panel

    MediaPlayer.Open;
    MediaPlayer.DisplayRect := Rect(0, 0, 0, 0);
    if (MediaPlayer.DisplayRect.Right > 0) and
      (MediaPlayer.DisplayRect.Bottom > 0) then
    begin
      if (MediaPlayer.DisplayRect.Right > MCIAnzeige.Width) or
        (MediaPlayer.DisplayRect.Bottom > MCIAnzeige.Height) or
        ((MediaPlayer.DisplayRect.Right * 2 <= MCIAnzeige.Width) and
        (MediaPlayer.DisplayRect.Bottom * 2 <= MCIAnzeige.Height)) then
      begin
        NewWidth := MediaPlayer.DisplayRect.Right * MCIAnzeige.Height
          div MediaPlayer.DisplayRect.Bottom;
        if NewWidth > MCIAnzeige.Width then
        begin
          NewHeight := MediaPlayer.DisplayRect.Bottom * MCIAnzeige.Width
            div MediaPlayer.DisplayRect.Right;
          NewWidth := MCIAnzeige.Width;
        end else
          NewHeight := MCIAnzeige.Height;
      end
      else
      begin
        NewWidth := MediaPlayer.DisplayRect.Right;
        NewHeight := MediaPlayer.DisplayRect.Bottom;
      end;

      MediaPlayer.DisplayRect := Rect(
        (MCIAnzeige.Width - NewWidth) div 2,
        (MCIAnzeige.Height - NewHeight) div 2,
        NewWidth, NewHeight);
    end;
Hintergrund: Wenn man DisplayRect auf (0, 0, 0, 0) setzt, werden die letzten beiden Koordinaten automatisch auf die Videomaße gesetzt. (Falls es kein Video ist, sind sie natürlich auch 0.) Damit hat man die Videomaße und muss nun so rechnen, dass das Verhältnis beibehalten wird. Ich habe es nach der LetterBox-Methode gemacht, d. h. es wird nichts vom Video abgeschnitten, sondern es bleiben evtl. Teile frei, um das Seitenverhältnis zu bewahren.

[edit] Mein Code skaliert nur zu große Videos oder die, die kleiner als die Hälfte sind, da ich das damals so wollte. Wenn du das nicht willst, lass das

Delphi-Quellcode:
if (MediaPlayer.DisplayRect.Right > MCIAnzeige.Width) or
  (MediaPlayer.DisplayRect.Bottom > MCIAnzeige.Height) or
  ((MediaPlayer.DisplayRect.Right * 2 <= MCIAnzeige.Width) and
  (MediaPlayer.DisplayRect.Bottom * 2 <= MCIAnzeige.Height)) then
sowie das dazugehörige else begin..end weg.

[/edit]

Mfg
FAlter

[edit] Letzten Delphi-Tag korrigiert. [/edit]
Felix Alter
  Mit Zitat antworten Zitat