|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Экстрагирование avi фрейма
Есть проблема с экстрагирование avi фрейма: Суть проблемы заключается в следующем:
Экстрагировать фрейм из AVI с помощью функции взятой отсюда.. Но проблема в том, что эта функция не работает на Windows Xp, а на Win7 все норм. Может кто-то что-то знает по этому поводу? Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. |
#2
|
|||
|
|||
Может кто-то знает другой способ достать фреймы?
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. |
#3
|
||||
|
||||
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо 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); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось M.A.D.M.A.N., 11.01.2014 в 10:10. |
#6
|
|||
|
|||
Цитата:
Может я использую не такой vfw.pas. Они ведь разные бывают.. Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. Последний раз редактировалось zibert, 11.01.2014 в 01:23. |
#7
|
||||
|
||||
Я нашёл древний, из поставки GLScene за 2001 год и немного подправил с учётом требований Дельфи 7.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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 приложен.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#12
|
|||
|
|||
Цитата:
То-есть во втором случае вы получали 3 фрейм? А качество картинки меняется? У меня получается картинка немного темнее, чем на видео.. Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. |
#13
|
||||
|
||||
1. Да 3-ий фрейм.
2. На вид вроде одинаково. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо 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. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 13.01.2014 в 03:02. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
zibert (13.01.2014)
|