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

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

Artexoid

Кто знает как захватывать кадры из потока кадров видео (AVI, MPG) и сохранять их в картинки (bmp например) подскажите пожалуйста!!!
Заранее спасибо.
 
1. Использовать готовое решение .. что-нить типа ImageLib
2. Просто грабить содержимое того окна в котором ведётся проигрывание.
3. Самый правильный способ: пропускать содержимое через себя и вырезать что надо... В таком случае впердё читать MS SDK .. там есть пример...
 
Barmutik
Ты мне то что сказал кодом напиши, принцип действия я и так понимаю.
 
Barmutik
Напиши мне любой вариант.
Что ты на меня кричиш :)?? Разве я не конкретные вопросы задаю?
Ну вот тебе еще конкретней!:
Я подключаю видео, нажимаю плэй, просматриваю его, рас мне момент понравился я нажимаю стоп, нажимаю кнопку сахранить кадр и сохраняю его в bmp или jpg или мне все равно во что. Я незнаю как захватить и сохранить кадр.
Если ты знаеш как это сделать то прошу помоги мне пожалуйста, если не знаеш то ненадо говорить что вопросы неконкретные или не хочеш за меня задачу выполнять. Форум для того и предназначин чтобы помощи просить, узнавать что-то новое !
 
Хммм... я кричу? :unsure:

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

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

Задача решена :) :unsure:
 
Barmutik
Просматриваеш видео... нашёл классный момент... нажал паузу... нажал магическую комбинацию Alt+Print Screen... запустил MS Paint ... далее Ctrl+V... потом сохранить как и указал имя фалйа...
не работает с DirectX Preent Screen надо что-то типа Hyper Snap юзать.
 
Ну я вообщем-то образно выразился .. рассматривался самый простой вариант...

Вот пример захвата содержимого окна
Код:
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:
 
Barmutik
:) Спасибо большое на AVI твоя ссылка сласно действует. А на mpg у тебя ничего нет ???
 
Надо поискать.... ну хорошо что уже хоть что-то подошло :huh:
 
Artexoid
Там в ссылках, что дал Barmutik есть пример как делать скриншоты видео, используя TMediaPlayer. Решение конечно не очень красивое, но проблему конвертации mpg или другого видео формата в bmp решает. Там правда пример для avi. См.
 
zubr
Неа, тот пример решает проблему только с AVI а другие форматы просто пустая картинка и все.
 
Вот нашёл случайно .. правда надо разбираться как работает:

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.
 
Barmutik
IBasicVideo.GetCurrentImage!! Это где такое :D ?
 
Это интерфейс ... описан в MSDN ... случайно наткнулся... по описанию как раз то что Вам нужно ...
 
Barmutik
Извени я не такой прошареный :(... Что такое MSDN?.
 
MSDN - Microsoft Developer Network - практически полный хелп по возможностям программирования для Виндовс.. более полного уже не найдёш..

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

Можно купить на любом рынке .. полное сочинение занимает 4 компакта...
 
Можно использовать прогу Video Converter No 1. Эта программа может разбивать весь MPEG файл в виде картинок по кадрам в bmp формат.
 
Создайте новый пустой проект и в главном модуле запишите:

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.

Можете компилировать и запускать.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!