Delphi 将TPanel上显示的图片复制到TImage中

Delphi 将TPanel上显示的图片复制到TImage中,delphi,delphi-xe6,mplayer,Delphi,Delphi Xe6,Mplayer,我已成功将MPlayer视频结果嵌入TPanel中,但无法将TPanel结果复制到TImage中 只有t面板的正常图片被复制到t图像: 使用管道和MPlayer wid命令行参数执行嵌入。MPlayer使用TPanel句柄显示结果 以下代码片段经过测试,但只是正常的TPanel图片复制到TImage: Image1.Picture.Bitmap.Canvas.CopyRect( Rect(0, 0, Image1.Width-1, Image1.Height-1), TMy

我已成功将MPlayer视频结果嵌入
TPanel
中,但无法将
TPanel
结果复制到
TImage

只有
t面板
的正常图片被复制到
t图像

使用管道和MPlayer wid命令行参数执行嵌入。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;

您也可以通过剪贴板进行复制,请尝试以下操作:

使用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;

我希望这能对您有所帮助。

我不太了解MPlayer,但通常视频的渲染方式会有些不同,您无法拍摄“正常”的屏幕截图。我确实找到了一些关于MPlayer的信息,这些信息建议您需要使用一个特定的参数来启动它,然后您可以让MPlayer自己制作屏幕截图。也许有办法将这些命令发送到嵌入式MPlayer?请参阅和。谢谢您的脚本,但它不起作用。像其他脚本一样,只显示普通面板的图片。