2016-06-09 3 views
0

Я внедрил видеорезультаты MPlayer в TPanel, но не смог скопировать TPanel результатов в TImage.Копировать отображаемое изображение на TPanel в TImage

ТОЛЬКО нормальная картина TPanel копируется в TImage:

enter image description here

Погружение осуществляется с использованием трубопровода и параметров WID командной строки MPlayer. MPlayer с использованием дескриптора TPanel для отображения результатов.

Следующие фрагменты тестируется, но это нормально TPanel изображение копируется в 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) 
); 

и это:

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

Я не знаю, в частности, MPlayer, но часто видео получается немного по-другому, и вы не можете взять «нормальный» снимок экрана. Я нашел некоторую информацию о MPlayer, которая предполагает, что вам нужно запустить его с помощью определенного параметра, после чего вы можете позволить самому MPlayer делать скриншоты. Может быть, есть способы отправить такие команды на ваш встроенный MPlayer? См. [This] (http://www.systutorials.com/2990/taking-screenshot-in-mplayer/) и [это] (http://mplayerhq.hu/pipermail/mplayer-users/2004-August/047721 .html). – GolezTrol

ответ

0

Вы также можете копировать через буфер обмена, попробуйте это:

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; 

Я надеюсь, что это поможет вам.

+0

Спасибо за скрипт, но не сработал. Как и в других сценариях, отображается только изображение обычной панели. – SAMPro