Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Интересная задача(MediaPlayer)  (Прочитано 10586 раз)
0 Пользователей и 1 Гость смотрят эту тему.
pilgrim
Гость
« : 02-12-2007 18:19 » 

Я работаю с кадрами в компоненте MediaPlayer , т.е я каждый кадр перегоняю в TBitmap (делаю скриншот). Скриншот он делает тогда когда в окне виден необходимый кадр. Мне нужно чтобы пользователь не видел предвижение в проигрователе по кадрам.

MediaPlayer1.Display:= ?; //Вместо ? я должен указать существующее окно
MediaPlayer1.Open;
MediaPlayer1.Position:= 25;

Вот как сделать так чтобы вместо существующего присвоить некий класс в который можно загнать изображение кадра и с него -> в TBitmap Здесь была моя ладья...
Записан
zubr
Гость
« Ответ #1 : 02-12-2007 20:12 » 

Интересно, как ты собираешься делать скриншот с медиаплеера? Для этого надо перехватывать видеопоток, используя мултимедиафункции capCreateCaptureWindow и т. п. или через DirectShow. Хорошие люди создали OpenSource компоненты DSPACK234 (может есть и более новая версия), основанные на DirectShow, там по моему, есть и пример граббера.
Записан
pilgrim
Гость
« Ответ #2 : 02-12-2007 20:28 » 

Скриншот делается методом Canvas.CopyRect;
НА Builder C++

 TRect  SDRect;
 SDRect = Rect(0, 0, Panel1->width, Panel1->height);

 TControlCanvas *CCanvas = new TControlCamvas;
 TBitmap *MyBitmap = new MyBitmap;

 MyBitmap->height = Panel1->height;
 MyBitmap->width = Panel1->width;

 CCanvas->Control = Panel1;
 MyBitmap->Canvas->CopyRect(SDRect, CCanvas, SDRect);

Если можешь объясни как через поток)))
 

Записан
zubr
Гость
« Ответ #3 : 02-12-2007 21:37 » 

pilgrim, ты не понял, речь идет не о графическом файле, а о видеопотоке. Судя по всему ты не пробовал делать скриншот с медиаплеера так как ты написал в своем ответе. Советую, попробуй и тогда поймешь.
Я тебе указал направления где искать и куда смотреть, а описывать интерфейс DirectShow и работу с ним, это извини, тема целой книги. Самый лучший вариант для тебя - это воспользоваться компонентами DSPACK234 (поищи в интернете), тем более они с исходниками + почитать MSDN на тему DirectShow.
Записан
pilgrim
Гость
« Ответ #4 : 02-12-2007 22:43 » 

Нет я конечно с тобой согласен. Да . Работать конечно надо с потоком. Но то что я написал работает, только если изображение выводится в окно. А ты ссылки знаешь на эл. литературу по DirectShow
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 03-12-2007 04:23 » 

pilgrim, таки сказано: MSDN.
Заходи на их сайт, а далее поиском.

Еще рекомендую скачать утилиту graphedit и поэкспериментировать с ней. В ней наглядно можно увидеть, как соединяются между собой DirectShow-компоненты.
Тут посмотри: http://directshow.wonderu.com/first2
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #6 : 03-12-2007 09:26 » new

Есть еще вариант, как делать скриншоты с видеопотока. Установить минипортвидеодрайвер из примеров DDK. После установки драйвера в системе, можно спокойно делать скриншоты обычным BitBlt.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines