Jak zapisać pojedynczą klatkę z pliku odtwarzanego przez

0

Witam.
Procedura :

procedure SaveFrame(FrameNumberToCapture: Integer; Filename: string);
var
BMP : TBitmap;
ADC : HDC;
GetPoint : TPoint;
MyJpeg: TJpegImage;
begin
BMP := TBitmap.Create;
BMP.Height := 240; // tu nalezy ustawić wysokość

BMP.Width := 320; // a tu szerokość klatki filmu

MediaPlayer1.TimeFormat := tfFrames;
MediaPlayer1.Display := Panel1;
GetPoint := Panel1.ClientToScreen(Point(0,0));
ADC := GetDC(0);
MediaPlayer1.Position := FrameNumberToCapture;
Application.ProcessMessages;
Bitblt(BMP.Canvas.Handle, 0,0,
      BMP.Width,BMP.Height,
      ADC, GetPoint.X, GetPoint.Y, SRCCOPY);

MyJpeg:= TJpegImage.Create;
MyJpeg.Assign(BMP);
MyJpeg.SaveToFile(Filename);
end;

zapisuje pojedynczą klatkę jednak na formie musi choć przez chwile być widoczny panel1. Może ktoś zna inny sposób pobierania klatki z pliku wideo?

0

zapisuje pojedynczą klatkę jednak na formie musi choć przez chwile być widoczny panel1. Może ktoś zna inny sposób pobierania klatki z pliku wideo?

jeżeli będzie widoczny na ułamek sekundy to w czym problem. Nie wiem dlaczego musi być widoczny, mozesz to wyjaśnić ??

0

jeżeli będzie widoczny na ułamek sekundy to w czym problem. Nie wiem dlaczego musi być widoczny, mozesz to wyjaśnić ??

Oczywiście, podana procedura wyświetla odpowiednią klatkę na panel1 a następnie kopiuje zawartość panelu do BMP, jeśli panel1 będzie ukryty to niestety nie daje efektu. W aplikacje wyświetlającej miniatury pierwszych klatek plików wideo wyświetlanie choć przez ułamek sekundy panelu1 jest mało efektywne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1