(Видео+Bitmap)*realtime=?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.106] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
(Видео+Bitmap)*realtime=?
|
Сообщ.
#1
,
|
|
|
|
Всем привет!
Есть надобность проигрывать любой видеофайл установленым в системе видеокодеком, с наложением картинки (TBitmap) по определённой маске или по исключению цвета. Пробвал компонент DSPACK, НО минус в том что при сварачивании или закрыванием ОКНА С ВИДЕО другим окном - прекращается наложение картинки и текста на полноэкранное устройство, хотя видео выводится. И отсуцтвует очень важная и нужная вещь: ресайз (Resize) играющего видео. Оно нужно для того, чтоб проигрывать клип любого размера в размере к примеру 720х576 без потери пропорций, ибо видео может быть и большего и меньшего размера и при наложении на него картинки будет разное качество или размер. Компонент TVideoGrabber не подходит по той-же причине, отсуцтвие проигрывания видео в заданом размере (Resize). В связи с этим ищется компонент который мог бы это организовать. Посоветуйте плиз. |
|
Сообщ.
#2
,
|
|
|
|
Scally
Да все там есть. Только готовить надо уметь. Цитата Scally @ И отсуцтвует очень важная и нужная вещь: ресайз (Resize) играющего видео. Оно нужно для того, чтоб проигрывать клип любого размера в размере к примеру 720х576 без потери пропорций, ибо видео может быть и большего и меньшего размера и при наложении на него картинки будет разное качество или размер. VideoWindow.VMROptions.KeepAspectRatio:=true; смотри пример Demos\D6-D7\VMR\VMRPlayWin Цитата Scally @ , НО минус в том что при сварачивании или закрыванием ОКНА С ВИДЕО другим окном - прекращается наложение картинки и текста на полноэкранное устройство, хотя видео выводится. Не понял о чем это ты. Ну останови вывод. Или в OnPaint обробатывай. попробуй поставить VideoWindow.VMROptions.Preferences+{или -}[vpPreferAGPMemWhenMixing] А вобще мне больше нравится VFW (Video For Windows). |
|
Сообщ.
#3
,
|
|
|
|
Цитата Pavia @ Scally Да все там есть. Только готовить надо уметь. Покрайней мере при рисовании на видео окне прямо в примере видео начинает мерцать Это говорит о уже не пригодности компонента. Цитата Scally @ И отсуцтвует очень важная и нужная вещь: ресайз (Resize) играющего видео. Оно нужно для того, чтоб проигрывать клип любого размера в размере к примеру 720х576 без потери пропорций, ибо видео может быть и большего и меньшего размера и при наложении на него картинки будет разное качество или размер. VideoWindow.VMROptions.KeepAspectRatio:=true; смотри пример Demos\D6-D7\VMR\VMRPlayWin кго и смотрел! А толку? Там такого нет. Цитата Scally @ , НО минус в том что при сварачивании или закрыванием ОКНА С ВИДЕО другим окном - прекращается наложение картинки и текста на полноэкранное устройство, хотя видео выводится. Не понял о чем это ты. Ну останови вывод. Или в OnPaint обробатывай. попробуй поставить VideoWindow.VMROptions.Preferences+{или -}[vpPreferAGPMemWhenMixing] Ничего из этого непомогает! При сварачивании видео окна или закрыванием его другим окном полностью - прекращается наложение хоть картинки, хоть текста. А вобще мне больше нравится VFW (Video For Windows). Мне-бы тоже понравилось если были примеры. кинь если есть плиз. я недумаю что моя задача очень сложна! Но кроме как ответов: - "Копай там-то - там-то" никто ничё неможет. Я уже весь в земле ! Нашел много другого кроме этого, а если и находил похожее, то оно по каким-то мелочным причинам неподходит.Такое ощущение что никто незнает как это сделать. Если несложно закинь примеров поболее для VWF. Может у тебя аська есть? Так было-б быстрее. Буду рад РАБОЧИМ примерам. Те что в комплекте - не работают толком! |
|
Сообщ.
#4
,
|
|
|
|
Вот наложение.
![]() ![]() VMRBitmap:= TVMRBitmap.Create(VideoWindow); Bitmap:=TBitmap.Create; with VMRBitmap, Canvas do try Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + '\penguin.bmp'); LoadBitmap(Bitmap); ColorKey:=clFuchsia; Options := VMRBitmap.Options + [vmrbSrcColorKey]; Source := VMRBitmap.Canvas.ClipRect; DrawTo(0,0,1,1, 1); finally Bitmap.Free; end; А ты делал через canvas. В этом случае ты должен перерисовывать каждый раз когда сробатывает событие onPaint. |
|
Сообщ.
#5
,
|
|
|
|
Цитата Pavia @ Вот наложение. ![]() ![]() VMRBitmap:= TVMRBitmap.Create(VideoWindow); Bitmap:=TBitmap.Create; with VMRBitmap, Canvas do try Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + '\penguin.bmp'); LoadBitmap(Bitmap); ColorKey:=clFuchsia; Options := VMRBitmap.Options + [vmrbSrcColorKey]; Source := VMRBitmap.Canvas.ClipRect; DrawTo(0,0,1,1, 1); finally Bitmap.Free; end; А ты делал через canvas. В этом случае ты должен перерисовывать каждый раз когда сробатывает событие onPaint. А ты сам-то пробвал запускать это??? Одно из главных недочётов что я тебе писал! ОБЯЗАТЕЛЬНО НАДО ДЕЛАТЬ РЕСАЙЗ!!!! Клипы имеют разный размер по X и Y. И при наложении текста, или картинки всё это получается разного качества. Если клип 720х576 то текст читаемый! А если 360x288 то уже не читабельный, всё кубами! Поэтому надо ОБЯЗОН ресайзить видео до к примеру 720х576 а уже потом рисовать на нём текст или картинку! Как это сделать??? И ещё одна проблема! X и Y у DRAWTO вводятся в процентах а не в пикселях! Это очень плохо. Кинь пожалуйста примеров для VFW вместе с самим VFW.pas а то мой видать с ошибкой и не компилится! Можно на мыло. |
|
Сообщ.
#6
,
|
|
|
|
Для ресайза картинки есть
with VMRBitmap do begin DestLeft DestTop DestRight DestBottom Dest end; Опять таки DrawTo(0,0,1,1, 1); Для ресайза видео файла есть. with (VideoWindow as IVMRMixerControl9) do SetOutputRect(0, @NormalizedRect); VideoWindow.VMROptions.KeepAspectRatio:=True; - сохронять пропорции Для получения размеров. VideoWindow.VMROptions.Mode:=vmrWindowless; (VideoWindow as IVMRWindowlessControl9).GetNativeVideoSize(W,H,AW,AH); VideoWindow.Width VideoWindow.Height Bitmap.Width Bitmap.Height |
|
Сообщ.
#7
,
|
|
|
|
а как насчёт того когда видеоокно перекрывается или сварачивается - ВСЕ это дело с наложением прекращается?
Никакие ONPaint тут не помогают ибо оно как-то системно? когда окно прячется его прорисовка ВАЩЕ прекращается пока оно опять хоть кусочек не будет виден на экране! Попробуй сам свернуть, или перекрой другим окном окно с видео при наложении на него. |
|
Сообщ.
#8
,
|
|
|
|
Scally
Пробовал все нормально. Что там у тебя не так? После разворачивания все появляется вновь. |
|
Сообщ.
#9
,
|
|
|
|
Цитата Pavia @ Scally Пробовал все нормально. Что там у тебя не так? После разворачивания все появляется вновь. Дык а я очём??? Чё толку что он при разварачивании всё появляется вновь! ОН ВАЩЕ НЕ ДОЛЖЕН ИСЧЕЗАТЬ НИКОГДА. Если ты не понял я говорю про отрисовку на полноэкранном устройстве, когда сварачиваешь!!! Оно и делает невозможным использование этого компонента! Оно должо ВСЕГДА быть! И в срёрнутом и в развёрнутом. |
|
Сообщ.
#10
,
|
|
|
|
Scally
Так оно все время рисуется. Вот пример снимаем изоброжение свернутого окна. Работает только при // VideoWindow.VMROptions.Mode:=vmrWindowless; ![]() ![]() var Stream: TMemoryStream; bitmap:Tbitmap; begin FormPlayWin.WindowState:=wsMinimized; {сворачиваем} sleep(5000); {пауза} bitmap:=Tbitmap.Create; Stream:= TMemoryStream.Create; try if VideoWindow.VMRGetBitmap(Stream) then begin bitmap.LoadFromStream(Stream); bitmap.SaveToFile(ExtractFilePath(Application.ExeName) + '\pp.bmp'); end; finally Stream.Free; bitmap.Free; end; end; |
|
Сообщ.
#11
,
|
|
|
|
НЕА! Не всё время! Ты посмотри на телик чё идёт?
Оно в памяти всегда рисуется, оттуда ты и считываешь, вот и думашь что всегда. А отрисовка на телевизоре (на втором устройстве. НЕ НА МОНИТОРЕ) прекращается когда сварачиваешь окно или закрываешь его другим окном. И твой пример: VMRBitmap:= TVMRBitmap.Create(VideoWindow); Bitmap:=TBitmap.Create; with VMRBitmap, Canvas do try Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + '\penguin.bmp'); LoadBitmap(Bitmap); ColorKey:=clFuchsia; Options := VMRBitmap.Options + [vmrbSrcColorKey]; Source := VMRBitmap.Canvas.ClipRect; DrawTo(0,0,1,1, 1); finally Bitmap.Free; end; вообще не работает пока не начнёшь выводить видео через TFILTER на это окно. |
|
Сообщ.
#12
,
|
|
|
|
Scally
У меня телека нет. Но мой совет отключи overlay может поможет.И за одно поставь vmrWindowed. Добавлено Выстави нужны монитор через IVMRMonitorConfig. |
|
Сообщ.
#13
,
|
|
|
|
Бесполезно! Та-же фигня. А отключение оверлея говорит что вывода на телевизор вообще небудет, что естественно мне НЕНУЖНО.
Ты говорил о VFW! Может кинешь мне примеров поболее решение данной задачи. ведь я уверен что для тебя это не сложно 1. Открываем на 2-м рабочем столе полноэкранное устройство(Оверлей) размером 720х576 2. Играем растягивая клип на весь размер пункта 1 3. поверх клипа проэцируем BMPшку ОЧЕНЬ ПРОШУ. Я УЖЕ НЕЗНАЮ К КОМУ ОБРАЩАТЬСЯ. Я уже кучу народу опросил, но все молчат или дают уклончивые ответы типа: капай в инете. Или опять предлагают лажу типа DSPack которая никогда нормально не заработает. |
|
Сообщ.
#14
,
|
|
|
|
Scally
Я тут полистал DirectX SDK. Там написанно что надо создовать два устройства для вывода на 2 разных монитора. Так что попробуй через IVMRMonitorConfig установить монитор. Примеров vfw у меня нет. Вернее есть на Си из MSDN. |
|
Сообщ.
#15
,
|
|
|
|
Очень жаль что ещё один человек который незнает как решить мою задачу. неужели я много прошу?
|