2016-06-09 11 views
0

Ich habe MPlayer Videoergebnisse erfolgreich in TPanel eingebettet, ABER kann TPanel Ergebnisse nicht in TImage kopieren.Kopieren Sie das angezeigte Bild auf einem TPanel in ein TImage

nur das normale Bild von TPanel in TImage kopiert:

enter image description here

Embedding wird mit Rohrleitungen und MPlayer wid Kommandozeilenparameter durchgeführt. MPlayer, der TPanel verwendet, um Ergebnisse anzuzeigen.

Die folgenden Schnipsel getestet, aber nur ganz normale TPanel Bild in TImage kopiert:

Image1.Picture.Bitmap.Canvas.CopyRect(
    Rect(0, 0, Image1.Width-1, Image1.Height-1), 
    TMyPanel(Panel1).Canvas,  //TMyPanel is an empty class to access canvas property 
    Rect(0, 0, Panel1.Width-1, Panel1.Height-1) 
); 

und diese:

Function PanelToBmp (Panel:TPanel):TBitmap; 
VAR 
    bmp : tBitmap; 
    DC : HDC; 
Begin 
    bmp := tBitmap.Create; 
    bmp.width := Panel.Width; 
    bmp.Height := Panel.Height; 
    DC := GetDc (Panel.Handle); 
    Bitblt(bmp.canvas.handle, 0, 0, Panel.Width, Panel.Height, Dc, 0, 0, NOTSRCCOPY); 
    Releasedc (Panel.handle,dc); 
    result := bmp; 
End; 
+1

Ich kenne nicht speziell MPlayer, aber oft wird Video ein wenig anders gerendert und man kann keinen "normalen" Screenshot davon machen. Ich habe einige Informationen über MPlayer gefunden, die vorschlagen, dass Sie mit einem bestimmten Parameter beginnen müssen, danach können Sie MPlayer selbst Screenshots machen lassen. Vielleicht gibt es Möglichkeiten, solche Befehle an Ihren eingebetteten MPlayer zu senden? Siehe [dies] (http://www.systutorials.com//2990/taking-screenshot-in-mplayer/) und [dies] (http://mplayerhq.hu/pipermail/mplayer-users/2004-August/047721 .html). – GolezTrol

Antwort

0

Sie können auch über die Zwischenablage kopieren, versuchen Sie dies:

uses ClipBrd;

procedure TForm1.Button1Click(Sender: TObject); 
var 
    lBmp: TBitmap; 
begin 
    lBmp := TBitmap.Create; 
    try 
    lBmp.SetSize(Panel1.ClientWidth, Panel1.ClientHeight); 
    BitBlt(lBmp.Canvas.Handle, 0, 0, Panel1.ClientWidth, Panel1.ClientHeight, TMyPanel(Panel1).Canvas.Handle, 0, 0, SRCCOPY); 
    Clipboard.Assign(lBmp); 

    Image1.Picture.Bitmap.Assign(lBmp); 
    finally 
    lBmp.Free; 
    end; 
end; 

Ich hoffe, das hilft Ihnen.

+0

Danke für das Skript, hat aber nicht funktioniert. Wie andere Skripte zeigen nur Bild von einem normalen Panel. – SAMPro