我目前写到让视频以指定的画面显示在VideoPlayer1播放控件上
procedure TForm1.ShowVideoFrame(SampleIndex: Integer);
var
lpBi:PBitmapInfoHeader;
begin
if FGetVideoFrame=nil then exit;
lpBi:=AVIStreamGetFrame(FGetVideoFrame,SampleIndex);
if assigned(lpBi) then
begin
VideoPlayer1.DrawFrame(lpBI^,nil);
end;
FVideoSampleIndex:=SampleIndex;
end;
这里把VideoPlayer1.DrawFrame的代码放上
Procedure TVideoPlayer.DrawFrame(var bi:TBitmapInfoHeader;Bits:Pointer);
var
L,T,W,H:integer;
i,j:integer;
RGN:HRGN;
begin
if Visible=FALSE then exit;
DrawDIBHandleNeeded;
DrawCanvasNeeded;
if (DrawDIBHandleAllocated=FALSE) OR (DrawCanvasAllocated=FALSE) then
exit;
GetDrawRect(L,T,W,H,bi.biWidth,bi.biHeight);
if FAlignment = fa_TileShow then
begin
RGN:=CreateRectRgn(0,0,Width,Height);
SelectClipRgn(DrawCanvas,RGN);
i:=T;
while i < Height do
begin
j:=L;
while j< Width do
begin
try
DrawDibDraw(
FDrawDIBH,DrawCanvas,j,i,W,H,
@bi,Bits,0,0,-1,-1,
DrawFlagsToDWord(FDrawFlags)
);
except
end;
inc(j,W);
end;
inc(i,H);
end;