2016-06-09 5 views
0

J'ai incorporé les résultats vidéo MPlayer dans TPanel avec succès, MAIS je ne peux pas copier les résultats TPanel dans un TImage.Copier l'image affichée sur un TPanel dans un TImage

seule l'image normale de TPanel est copié dans TImage:

enter image description here

incorporation est effectuée en utilisant la tuyauterie et MPlayer paramètres de ligne de commande WID. MPlayer utilisant la poignée TPanel pour afficher les résultats.

Les extraits suivants testés, mais juste image normale TPanel copié dans TImage:

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) 
); 

et ceci:

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

Je ne connais pas MPlayer en particulier, mais souvent la vidéo est rendue un peu différemment et vous ne pouvez pas prendre une capture d'écran «normale». J'ai trouvé quelques informations sur MPlayer qui suggère que vous devez le démarrer avec un paramètre spécifique, après quoi vous pouvez laisser MPlayer faire des captures d'écran. Peut-être qu'il existe des moyens d'envoyer de telles commandes à votre MPlayer intégré? Voir [this] (http://www.systutorials.com/2990/taking-screenshot-in-mplayer/) et [this] (http://mplayerhq.hu/pipermail/mplayer-users/2004-August/047721 .html). – GolezTrol

Répondre

0

Vous pouvez également copier dans le presse-papier, essayez ceci:

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; 

J'espère que cela vous aidera.

+0

Merci pour le script, mais cela n'a pas fonctionné. Comme d'autres scripts montrent seulement l'image d'un panneau normal. – SAMPro