2016-06-09 65 views
0

我已成功將MPlayer視頻結果嵌入TPanel,但無法將TPanel結果複製到TImage中。將TPanel上的顯示圖片複製到TImage中

ONLY的TPanel正常圖象被複制到TImage:使用配管和MPlayer的WID命令行參數進行

enter image description here

嵌入。 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/)和[this](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

感謝您的腳本,但沒有奏效。像其他腳本一樣,只顯示正常Panel的圖片。 – SAMPro