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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 12:26   #1
jocry
Пользователь
 
Аватар для jocry
 
Регистрация: 05.10.2008
Сообщений: 49
По умолчанию Как наложить полупрозрачный рисунок поверх видео.

Приветствую всех. Столкнулся с такой проблемой как наложить полупрозрачный рисунок (например, png) поверх видео. Предполагаю это можно это сделать при помощи DirectShow, но внятной информации по нему не где не нашел.
jocry вне форума Ответить с цитированием
Старый 02.11.2009, 12:38   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

вы правы, это можно сделать в directshow, для этого есть интерфейс -IVMRMixerBitmap. Для этого при построении графа на свое видео внедрите vmr интерфейс... (меж IGraphBuilder и RenderFile)

...кроме того данный метод подробно можно проследить на примерах прилагаемых к библиотеке dspack.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.11.2009, 07:44   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

На этом форуме уже вроде распинался про ток как выводить видео, потом вам нужен SampleGrabber, и на обработчик OnSampleBuffer (кажется так, точно уже не помню) и там вы получаите картинку буффер, битмап... ну и соотвественно биты, и кто вам мешает обработать эти биты с наложением новых (вашей "картинки", png)? ну и вывести готовый буфер куда угодно.
BOBAH13 вне форума Ответить с цитированием
Старый 03.11.2009, 09:22   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

хочу обратить внимание аффтара на темки внизу и для общего развития
1 и 2

...теперь, что касается -SampleGrabber. Всегда использовал его для граба битовой матрицы из видеопотока. Если есть способы обратного наложения, хотелось-бы увидеть метод...

лично для наложения, после того как граф построен с интерфейсом IID_IVMRMixerBitmap делал так:
Код:
type
  TDSMP = record
    Initialized  : boolean;
    
    //DirectShow
    GraphBuilder : IGraphBuilder;
    MediaControl : IMediaControl;
    MediaSeeking : IMediaSeeking;
    MediaEventEx : IMediaEvent;
    BasicAudio   : IBasicAudio;
    BasicVideo   : IBasicVideo;
    VideoWindow  : IVideoWindow;
    //grab-
    pGrabber     : ISampleGrabber;
    pGrabberF    : IBaseFilter;
    mt           : AM_MEDIA_TYPE;
    //VMR-
    pRenderer    : IBaseFilter;
    pConfig      : IVMRFilterConfig;
    pBitmap      : IVMRMixerBitmap;
    VMRBitmap    : VMRALPHABITMAP;
    //color_control-
    pVProcAmp    : IAMVideoProcAmp;
    pVProcAmpF   : IBaseFilter;
    v1_min,v1_max,v1_pos,v1_freq,         //яркость
    v2_min,v2_max,v2_pos,v2_freq,         //контрастность
    v3_min,v3_max,v3_pos,v3_freq,         //оттенок
    v4_min,v4_max,v4_pos,v4_freq:smallint;//насыщенность
    v1_en,v2_en,v3_en,v4_en:bool;         //доступ к регулятору
    //Video info
    VideoAvail   : boolean;
    VideoWidth   : integer;
    VideoHeight  : integer;
    VideoBitRate : integer;
    VideoFPS     : single;
  end;

...
бла-бла-бла
var _dsmp: TDSMP;
...

var osb: tbitmap;
    w,h: integer;
begin
 with _dsmp do if Initialized then begin
  osb:= tbitmap.Create;
  osb.Canvas.Brush.Color:= $0;

  osb.Canvas.Font.Name:= 'arial';
  osb.Canvas.Font.Size:= 16;
  osb.Canvas.Font.Style:= [fsBold];
  osb.Canvas.Font.Color:= 65535;// 65280
  w:= osb.Canvas.TextWidth('w');
  h:= osb.Canvas.TextHeight('w');
  osb.Width := length(s)*w;
  osb.Height:= h;
  osb.Canvas.TextOut(0,0,s);

  ZeroMemory(@VMRBitmap, sizeof(VMRBitmap));
  VMRBitmap.dwFlags  := VMRBITMAP_HDC or VMRBITMAP_SRCCOLORKEY;
  VMRBitmap.clrSrcKey:= 0;
  VMRBitmap.hdc      := osb.Canvas.Handle;
  VMRBitmap.rSrc     := osb.Canvas.ClipRect;
  //

  VMRBitmap.rDest.left  := 0.25;
  VMRBitmap.rDest.right := 0.95;
  VMRBitmap.rDest.top   := 0.05;
  VMRBitmap.rDest.bottom:= 0.12;
  VMRBitmap.fAlpha      := alpha;
  pBitmap.SetAlphaBitmap(VMRBitmap);
  osb.Free
 end
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полупрозрачный image postal2 Мультимедиа в Delphi 11 23.05.2012 19:30
Как наложить битовую маску? Никки Общие вопросы .NET 6 28.08.2009 13:01
Ссылку наложить на флешку zavodilo JavaScript, Ajax 2 24.03.2009 16:46
Как наложить иконку с исходным размером 16х16 на битмап с размером 32х32? SkAndrew Мультимедиа в Delphi 1 26.04.2008 14:44
Картинка поверх видео deadly Мультимедиа в Delphi 1 24.05.2007 22:42