Захват видео изображения

  • Автор темы Artexoid
  • Дата начала
A

Artexoid

Гость
#1
Кто знает как захватывать кадры из потока кадров видео (AVI, MPG) и сохранять их в картинки (bmp например) подскажите пожалуйста!!!
Заранее спасибо.
 
B

Barmutik

Гость
#2
1. Использовать готовое решение .. что-нить типа ImageLib
2. Просто грабить содержимое того окна в котором ведётся проигрывание.
3. Самый правильный способ: пропускать содержимое через себя и вырезать что надо... В таком случае впердё читать MS SDK .. там есть пример...
 
A

Artexoid

Гость
#3
Barmutik
Ты мне то что сказал кодом напиши, принцип действия я и так понимаю.
 
A

Artexoid

Гость
#5
Barmutik
Напиши мне любой вариант.
Что ты на меня кричиш :)?? Разве я не конкретные вопросы задаю?
Ну вот тебе еще конкретней!:
Я подключаю видео, нажимаю плэй, просматриваю его, рас мне момент понравился я нажимаю стоп, нажимаю кнопку сахранить кадр и сохраняю его в bmp или jpg или мне все равно во что. Я незнаю как захватить и сохранить кадр.
Если ты знаеш как это сделать то прошу помоги мне пожалуйста, если не знаеш то ненадо говорить что вопросы неконкретные или не хочеш за меня задачу выполнять. Форум для того и предназначин чтобы помощи просить, узнавать что-то новое !
 
B

Barmutik

Гость
#6
Хммм... я кричу? :unsure:

На такое описание проблемы есть только один совет:

Просматриваеш видео... нашёл классный момент... нажал паузу... нажал магическую комбинацию Alt+Print Screen... запустил MS Paint ... далее Ctrl+V... потом сохранить как и указал имя фалйа...

Задача решена :) :unsure:
 

admin

Well-Known Member
08.08.2003
2 754
1
#7
Barmutik
Просматриваеш видео... нашёл классный момент... нажал паузу... нажал магическую комбинацию Alt+Print Screen... запустил MS Paint ... далее Ctrl+V... потом сохранить как и указал имя фалйа...
не работает с DirectX Preent Screen надо что-то типа Hyper Snap юзать.
 
B

Barmutik

Гость
#8
Ну я вообщем-то образно выразился .. рассматривался самый простой вариант...

Вот пример захвата содержимого окна
Код:
var
DC  : hDC;
Rect : TRect;
Bitmap: TBitmap;
Handle: hWnd;
wX,wY : integer;
begin
Handle:=FindWindow('','Intro.avi');
GetWindowRect(Handle,Rect);
wX:=(Rect.Right - Rect.Left);
wY:=(Rect.Bottom - Rect.Top);
DC:=GetWindowDC(Handle);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=CreateCompatibleBitmap(DC,wX,wY);
BitBlt(Bitmap.Canvas.Handle,0,0,wX,wY,DC,0,0,SRCCOPY);
ReleaseDC(Handle,DC);
Clipboard.SetAsHandle(CF_BITMAP,Bitmap.Handle);
Вот хороший линк где рассказывают как можно сделать в частном случае из AVI в Bitmap:
http://www.efg2.com/Lab/Library/Delphi/Graphics/BMP.htm
 
A

Artexoid

Гость
#9
Barmutik
:) Спасибо большое на AVI твоя ссылка сласно действует. А на mpg у тебя ничего нет ???
 
B

Barmutik

Гость
#10
Надо поискать.... ну хорошо что уже хоть что-то подошло :huh:
 
Z

zubr

Гость
#11
Artexoid
Там в ссылках, что дал Barmutik есть пример как делать скриншоты видео, используя TMediaPlayer. Решение конечно не очень красивое, но проблему конвертации mpg или другого видео формата в bmp решает. Там правда пример для avi. См. http://www.efg2.com/Lab/Library/Delphi/Graphics/AVItoBMP.ZIP
 
A

Artexoid

Гость
#12
zubr
Неа, тот пример решает проблему только с AVI а другие форматы просто пустая картинка и все.
 
B

Barmutik

Гость
#13
Вот нашёл случайно .. правда надо разбираться как работает:

IBasicVideo.GetCurrentImage

Returns a copy of the current image that is waiting at the renderer.

An application can use this method to get a copy of the current image the video renderer holds when paused. The size of the buffer required to hold the image can be obtained by calling the method with a null image pointer. In this case, the buffer size is filled out with the byte count required.
 
B

Barmutik

Гость
#15
Это интерфейс ... описан в MSDN ... случайно наткнулся... по описанию как раз то что Вам нужно ...
 
A

Artexoid

Гость
#16
Barmutik
Извени я не такой прошареный :(... Что такое MSDN?.
 
B

Barmutik

Гость
#17
MSDN - Microsoft Developer Network - практически полный хелп по возможностям программирования для Виндовс.. более полного уже не найдёш..

Очень полезная вещь ... практически 70% вопросов можно решить поискать в нём... я думаю используется как настольное приложении у программистов пишущих под Виндовс.

Можно купить на любом рынке .. полное сочинение занимает 4 компакта...
 
P

Pete

Гость
#19
Можно использовать прогу Video Converter No 1. Эта программа может разбивать весь MPEG файл в виде картинок по кадрам в bmp формат.
 
G

Guest_

Гость
#20
Создайте новый пустой проект и в главном модуле запишите:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel; //установите свойства Height = 256 With = 128
Image1: TImage; //установите свойства Height = 256 With = 128

MediaPlayer1: TMediaPlayer; { установите свойства :
Display = Panel1
AutoOpen = True
FileName = "выбирете файл с расширением .avi" }

Timer1: TTimer; {установите свойства:
Interval = 10
Enabled = false }

procedure MediaPlayer1PostClick(Sender: TObject; Button: TMPBtnType);
procedure Timer1Timer(Sender: TObject);
private
public
end;

var
Form1: TForm1;
CCanvas:TControlCanvas;

implementation

{$R *.dfm}

procedure TForm1.MediaPlayer1PostClick(Sender: TObject;
Button: TMPBtnType);
begin
if Button=btPlay then begin
CCanvas:=TControlCanvas.Create;
CCanvas.Control:=Panel1;
Timer1.Enabled:=true; end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Canvas.CopyRect(Rect(0,0,256,128),CCanvas,Rect(0,0,256,128));
end;

end.

Можете компилировать и запускать.