Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 11.10.2017, 11:07   #1
АНАТОЛИЙ249
Форумчанин
 
Регистрация: 05.02.2007
Сообщений: 81
Репутация: 42
По умолчанию BASSVIDEO

Кто может знает, как взять кадр из видео без остановки самого видео потока, примеры есть но там сохраняться в файл , и с остановкой потока, просто мне нудно сделать детектор движения.

Код:

procedure TForm1.SaveFrame(FileName : widestring);
var
  pos : double;
begin
  pos := BassVideo_GetPosition(Chan);//+ precis que progressDuree.Position
  BassVideo.BassVideo_CaptureBitmap(PWideChar(PATH+FileName), pos, PWideChar(PATH+FileName), BASS_UNICODE);
end;

Спасибо.

Последний раз редактировалось Arigato; 26.10.2017 в 11:33.
АНАТОЛИЙ249 вне форума   Ответить с цитированием
Старый 11.10.2017, 13:12   #2
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Адрес: Сибирь
Сообщений: 109
Репутация: 27

skype: raw_2_raw
По умолчанию

Можете прямо с диска читать из скрытого файла, но выглядеть будет как костыль, да.
dummy_user вне форума   Ответить с цитированием
Старый 25.10.2017, 16:39   #3
АНАТОЛИЙ249
Форумчанин
 
Регистрация: 05.02.2007
Сообщений: 81
Репутация: 42
По умолчанию

Вот нашел что можно вызвать BassVideo_Set_Draw_CallBack но как это применить ума не приложу,может кто что подскажет ?

Спасибо.


Код:

Hi kenshin1101 
I am trying to get pictures from video every 5 secs
BassVideo.BassVideo_CaptureBitmap isn't working with all video files
please read this code in delphi and tel me where is wrong.
thank you

if not OpenDialog1.Execute then exit;
source := OpenDialog1.FileName;
chan := BassVideo_StreamCreateFileEx(source, 0,nil, nil);
if chan = 0 then exit;
   BassVideo_Play(chan);
   BassVideo_Pause(chan);
   vLength  := BassVideo_GetLength(chan);
   while (vPos < vLength) do begin
      vPos := vPos + 5;
      BassVideo_SetPosition(chan,vPos);
      dc := GetDC(BassVideo_GetVideoWindow(chan,0));
      BitBlt(buffer.Canvas.Handle ,0,0,vWidth, vHeight,dc,0,0,SRCCOPY);
      Form3.Image1.Canvas.Draw(0,0,Buffer);
   end;


BassVideo_CaptureBitmap is open video and try grab some frame, if you can't get bitmap from that maybe the VideoWindow not support or some error appear

You can't use GetDC with the videowindow because the video is work using other way

try use BassVideo_StreamCreateFile with BASSVIDEO_VIDEOEFFECT flags and call BassVideo_Set_Draw_CallBack, you'll have dc of the image in the callback


Последний раз редактировалось Arigato; 26.10.2017 в 11:36.
АНАТОЛИЙ249 вне форума   Ответить с цитированием
Старый 25.10.2017, 23:21   #4
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка ру
Сообщений: 789
Репутация: 355
По умолчанию

Немного поэкспериментировав у меня получилось добиться вызова интересующую вас функцию
Код:

procedure myCallBackDraw(chan : DWORD; DC : HDC; user : Pointer); stdcall;
begin
//рисуем на чем угодно для примера на форме но можно и в Bitmap думаю разберетсь
BitBlt(Form1.Canvas.Handle ,0,0, Form1.Width, Form1.Height,dc,0,0,SRCCOPY);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
  begin
    chan := BassVideo_StreamCreateFile(PChar(OpenDialog1.FileName), BASSVIDEO_VIDEOEFFECT, 0, nil, nil);
 if chan <> 0 then
    begin
  // Вызываем CallBack
    BassVideo_Set_Draw_CallBack(chan, myCallBackDraw, nil);
     BassVideo_Play(chan);
     end;
  end;
end;


Последний раз редактировалось Aliens_wolfs; 26.10.2017 в 23:17.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 26.10.2017, 05:10   #5
АНАТОЛИЙ249
Форумчанин
 
Регистрация: 05.02.2007
Сообщений: 81
Репутация: 42
По умолчанию

Спасибо вам огромное за помощь. Как я понял это обратная функция вызова видео DC с которого можно взять bitmap картинку то что мне и было нужно.

и еще не большой вопрос ,как в форуме выставить код оформленный или как в рамке ?

Последний раз редактировалось АНАТОЛИЙ249; 26.10.2017 в 05:14.
АНАТОЛИЙ249 вне форума   Ответить с цитированием
Старый 26.10.2017, 11:06   #6
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка ру
Сообщений: 789
Репутация: 355
По умолчанию

Для оформления кода нажмите на панели инструментов в окне сообщения значок решетки у вас появиться в квадратных скобках CODE Вставляем свой код /CODE, а для цитаты значок перед решеткой
QUOTE Вставляем цитату /QUOTE

Последний раз редактировалось Aliens_wolfs; 26.10.2017 в 11:54.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 26.10.2017, 18:18   #7
АНАТОЛИЙ249
Форумчанин
 
Регистрация: 05.02.2007
Сообщений: 81
Репутация: 42
По умолчанию

Спасибо за помощь.
АНАТОЛИЙ249 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BASSVideo regman Мультимедиа в Delphi 3 27.08.2012 02:31
BassVideo (утановка) AmbaQ Компоненты Delphi 9 03.09.2010 20:47
Ошибка в BassVideo regman Мультимедиа в Delphi 1 27.05.2010 13:53




03:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru