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

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

Artexoid

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

Barmutik

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

Artexoid

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

Artexoid

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

Barmutik

Хммм... я кричу? :unsure:

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

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

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

admin

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

Barmutik

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

Вот пример захвата содержимого окна
Код:
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:
 
A

Artexoid

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

Barmutik

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

zubr

Artexoid
Там в ссылках, что дал Barmutik есть пример как делать скриншоты видео, используя TMediaPlayer. Решение конечно не очень красивое, но проблему конвертации mpg или другого видео формата в bmp решает. Там правда пример для avi. См.
 
A

Artexoid

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

Barmutik

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

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.
 
A

Artexoid

Barmutik
IBasicVideo.GetCurrentImage!! Это где такое :D ?
 
B

Barmutik

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

Artexoid

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

Barmutik

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

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

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

Pete

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

Guest_

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

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.

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

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