![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть проблема с экстрагирование avi фрейма: Суть проблемы заключается в следующем:
Экстрагировать фрейм из AVI с помощью функции взятой отсюда.. Но проблема в том, что эта функция не работает на Windows Xp, а на Win7 все норм. Может кто-то что-то знает по этому поводу? |
|
#2
|
|||
|
|||
|
Может кто-то знает другой способ достать фреймы?
|
|
#3
|
||||
|
||||
|
|
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
zibert (10.01.2014)
| ||
|
#4
|
|||
|
|||
|
Цитата:
Это конечно хороший способ. Но не доверяю я Canvas'у. Хотелось бы процедуру которая напрямую это все делает (Без медиа плеера и канваса) Вот нашел функцию, но не могу понять, что нужно указывать в параметре dc: HDC. Остальные параметры более понятны. avifn - путь к ави файлу. TmpBmp - сам фрейм, который получаем на выходе. lPos - номер фрейма, который нужно достать. Если что - то не так, то поправьте. Последний раз редактировалось M.A.D.M.A.N., 11.01.2014 в 10:10. |
|
#5
|
||||
|
||||
|
Цитата:
DC нужно получить Код:
SysDC := GetDC(0); DC := CreateCompatibleDC(SysDC); // Здесь вызов DeleteDC(DC); ReleaseDC(0, SysDC); Последний раз редактировалось M.A.D.M.A.N., 11.01.2014 в 10:10. |
|
#6
|
|||
|
|||
|
Цитата:
Может я использую не такой vfw.pas. Они ведь разные бывают.. Последний раз редактировалось zibert, 11.01.2014 в 01:23. |
|
#7
|
||||
|
||||
|
Я нашёл древний, из поставки GLScene за 2001 год и немного подправил с учётом требований Дельфи 7.
|
|
#8
|
|||
|
|||
|
Цитата:
я вызываю так: Код:
var SysDC,DC:HDC;
......................
SysDC := GetDC(0);
DC := CreateCompatibleDC(SysDC);
GetAVIFrame('типа путь к ави', DC , image1.Picture.Bitmap, 1);
DeleteDC(DC);
ReleaseDC(0, SysDC);А вот когда я делаю так: Код:
GetAVIFrame('типа путь к ави', form1.Canvas.Handle , image1.Picture.Bitmap, 1); |
|
#9
|
|||
|
|||
|
Цитата:
|
|
#10
|
||||
|
||||
|
Сейчас проверю работу 2-ой функции. Код vfw приложен.
|
|
#11
|
||||
|
||||
|
Обе функции работают одинаково, у них и код практически один в один. Фреймы в обоих случаях выдаются те, что запрошены. Во-втором случае вызывал так:
Код:
procedure TForm1.Button22Click(Sender: TObject);
var
DC : HDC;
begin
DC := CreateDC('Display', nil, nil, nil);
GetAVIFrame('earth.avi', DC, image1.Picture.Bitmap, 3);
DeleteDC(DC);
end; |
|
#12
|
|||
|
|||
|
Цитата:
То-есть во втором случае вы получали 3 фрейм? А качество картинки меняется? У меня получается картинка немного темнее, чем на видео.. |
|
#13
|
||||
|
||||
|
1. Да 3-ий фрейм.
2. На вид вроде одинаково. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
zibert (11.01.2014)
| ||
|
#14
|
|||
|
|||
|
Все хорошо, да не очень((
Вставил функцию GrabAVIFrame и воспользовался вот этим vfw.pas. В итоге выдает access violation, хотя картинку сохраняет. Использую так: Код:
for i := 0 to NumberOfFrames - 1 do
begin
Str := 'Frames\' + inttostr(i) + '.bmp';
GrabAVIFrame(AVIFilePath, i, TempPath + Str);
end;изменил некоторые типы(потому что не принимал пасник) Код:
var
Error: Integer;
pFile: iAVIFile; {PAVIFile}
AVIStream: iAVIStream; {PAVIStream}
gapgf: iGETFRAME;{PGETFRAME}
lpbi: PBITMAPINFOHEADER;
bits: PChar;
hBmp: HBITMAP;
AviInfo: TAVIFILEINFO;{TAVIFILEINFOW}
TmpBmp: TBitmap;
DC_Handle: HDC;Последний раз редактировалось zibert, 13.01.2014 в 01:18. |
|
#15
|
||||
|
||||
|
Чем не устроил высланный файл?
Поглядел ваш файл, он "заточен" под юникод, хотя по-умолчанию отключён. Если используете Дельфи7, то нужно часть вызываемых функций в GrabAVIFrame изменить. К примеру, AVIFileInfo менем на AVIFileInfoA. Последний раз редактировалось angvelem, 13.01.2014 в 03:02. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
zibert (13.01.2014)
| ||