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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 09:38   #1
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
Сообщение Сделать картинку поверх видео.

Видео отображается на Panel, но нужно поверх видео наложить картинку(она без фона, ну т.е. пнг). SendToBack/Bring to Front - не помогают. Картинку помещал как на форму, так и на панель, тоже ничего. Пробовал еще Панель, на нее поместить еще 1 панель, и на вторую панель уже картинку, сработало, но вторая панель то не прозрачная. Вообщем подскажите вариант решения это проблемы.
Vyacheslav. вне форума Ответить с цитированием
Старый 14.12.2017, 09:55   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Нужно выводить кадр в DIB либо в Bitmap затем накладывать свою картинку туда же, а уже потом выводить на panel. Покажите часть кода как вы работаете с видео, нужно понять какими методами вы работаете с видео что бы вам помочь.

Последний раз редактировалось Aliens_wolfs; 14.12.2017 в 10:08.
Aliens_wolfs вне форума Ответить с цитированием
Старый 14.12.2017, 10:02   #3
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
Сообщение

Код:
procedure TForm3.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile('Images\Personage\Personage Arsenal\Killjoy.png');
MediaPlayer1.DeviceType:= dtAutoSelect;
MediaPlayer1.FileName := 'D:\Скилловая папка\Delphi-7\BK\Video\Killjoy.mp4';
MediaPlayer1.Display:=Panel1;
MediaPlayer1.Open;
MediaPlayer1.DisplayRect := Panel1.ClientRect;
MediaPlayer1.Play;
end;
Изображения
Тип файла: jpg _E7ROgJsk_8.jpg (32.2 Кб, 72 просмотров)
Vyacheslav. вне форума Ответить с цитированием
Старый 14.12.2017, 10:11   #4
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
По умолчанию

Delphi7. Использую стандартный MediaPlayer из вкладки System. Ну а вот с двумя панельками у меня получилось, только можно как-то вторую прозрачной сделать? Или как лучше/проще?
Vyacheslav. вне форума Ответить с цитированием
Старый 14.12.2017, 11:06   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Прозрачная панель с прозрачным image поверх другой панели с картинкой. Что там будет над панелью с видео сам смотри
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, TypInfo,
  jpeg;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyPanel = class(TPanel)
  private
  protected
    procedure Paint; override;
  public
    constructor CreateWithBitMap(AOwner: TComponent; BitMap: TBitMap);
    procedure CreateParams(var Params: TCreateParams); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TMyPanel.CreateWithBitMap(AOwner: TComponent; BitMap: TBitMap);
var Image: TImage;
begin
  inherited Create(AOwner);
  Image:=TImage.Create(Self);
  Image.Parent:=Self;
  Image.Align:=alClient;
  Image.Proportional:=True;
  Image.Stretch:=True;
  Image.Transparent:=True;
  Image.Picture.Bitmap.Assign(BitMap);
end;

procedure TMyPanel.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle:=Params.ExStyle+WS_EX_TRANSPARENT;
end;

procedure TMyPanel.Paint;
begin
  Canvas.Brush.Style:=bsClear;
end;

procedure TForm1.FormCreate(Sender: TObject);
var MyPanel: TMyPanel;
    BitMap: TBitmap;
begin
  BitMap:=TBitmap.Create;
  BitMap.LoadFromFile('d:\Cheked1.bmp');
  MyPanel:=TMyPanel.CreateWithBitMap(Self,BitMap);
  MyPanel.Parent:=Self;
  MyPanel.Caption:='';
  MyPanel.Left:=24;
  MyPanel.Top:=48;
  MyPanel.Width:=185;
  MyPanel.Height:=209;
  BitMap.Free;
end;
Изображения
Тип файла: jpg Безымянный.jpg (88.9 Кб, 72 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2017, 14:01   #6
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
Хорошо

Работает, спасибо!
Vyacheslav. вне форума Ответить с цитированием
Старый 14.12.2017, 14:14   #7
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
По умолчанию

Только не понимаю, почему при попытке снять на видео форму, или заскриншотить ее, видео становится черным, просто ничего не видно, почему Делфи не отрисовывает его? Ну как в посте #3 видно на скриншоте.

Последний раз редактировалось Vyacheslav.; 14.12.2017 в 14:18.
Vyacheslav. вне форума Ответить с цитированием
Старый 14.12.2017, 15:54   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вот еще примерчик небольшой, пишет на панели с видео, правда немного моргает
Код:
procedure VideoView(aMediaPlayer: TMediaPlayer; aX, aY: integer;  aTitle: string);
var
mainDC: HDC;
Canvas:TCanvas;
begin
 Canvas:=TCanvas.Create;
try
 Canvas.Handle:= GetDC(AMediaPlayer.Display.Handle);
 Canvas.Font.Size:= 18;
 Canvas.Font.Style:= [fsBold];
 Canvas.Font.Color:= clRed;
 Canvas.Brush.Style:=bsClear;
 Canvas.TextOut(aX, aY,'Text');
 finally
 ReleaseDC(AMediaPlayer.Display.Handle,Canvas.Handle);
 Canvas.Free;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.DeviceType:= dtAutoSelect;
MediaPlayer1.FileName := 'D:\Скилловая папка\Delphi-7\BK\Video\Killjoy.mp4';
MediaPlayer1.Open;
Timer1.Interval:= 1;
MediaPlayer1.DisplayRect := Panel1.ClientRect;
MediaPlayer1.Play;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
MediaPlayer1.Display:= Panel1;
if MediaPlayer1.Mode = mpPlaying then
VideoView(MediaPlayer1, 10, 10, 'Hello World');
end;
А то что у вас черный фон это потому что вы закрываете видимо панель, она должна быть видимой, иначе видео не будет
MediaPlayer работает только с видимой панелью, окном, эксперименты по наложению изображения будут глючными, для правильной работы с наложением изображения нужен полноценный буфер кадра чего MediaPlayer не дает.

Ищите другой компонент для работы с кадрами видео
Посмотрите эти темы
http://www.programmersforum.ru/showthread.php?t=313060
http://www.programmersforum.ru/showthread.php?t=312840

Последний раз редактировалось Aliens_wolfs; 14.12.2017 в 17:34.
Aliens_wolfs вне форума Ответить с цитированием
Старый 14.12.2017, 16:22   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Vyacheslav. Посмотреть сообщение
Только не понимаю, почему при попытке снять на видео форму, или заскриншотить ее, видео становится черным, просто ничего не видно, почему Делфи не отрисовывает его?
Потому что ДиректИкс. Дельфи тут не при чём. Попробуйте сделать скриншот видео из медиаплеера стандартным PrtScr - увидите такое же чёрное пятно.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 14.12.2017, 16:54   #10
Vyacheslav.
Форумчанин
 
Регистрация: 22.10.2017
Сообщений: 113
Сообщение

Сделал.
Цитата:
Сообщение от Sciv Посмотреть сообщение
Попробуйте сделать скриншот видео из медиаплеера стандартным PrtScr - увидите такое же чёрное пятно.
https://pp.userapi.com/c621701/v6217...eDRlZh69mo.jpg
Vyacheslav. вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как наложить маленькую картинку поверх большой Jarerd WordPress и другие CMS 3 03.12.2018 11:11
Как рисовать поверх видео DirectShow ???? FarStar Visual C++ 7 17.06.2011 12:57
Текст поверх видео... kotzzz Мультимедиа в Delphi 3 11.04.2010 21:01
Как наложить полупрозрачный рисунок поверх видео. jocry Мультимедиа в Delphi 3 03.11.2009 09:22
Картинка поверх видео deadly Мультимедиа в Delphi 1 24.05.2007 22:42