Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2017, 10:07   #1
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию 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 в 10:33.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 11.10.2017, 12:12   #2
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Сообщений: 109
По умолчанию

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

Вот нашел что можно вызвать 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 в 10:36.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 25.10.2017, 22:21   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Немного поэкспериментировав у меня получилось добиться вызова интересующую вас функцию
Код:
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 в 22:17.
Aliens_wolfs вне форума Ответить с цитированием
Старый 26.10.2017, 04:10   #5
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

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

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

Последний раз редактировалось АНАТОЛИЙ249; 26.10.2017 в 04:14.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 26.10.2017, 10:06   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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