Приправление карри является преобразованием, которое может быть применено к функциям, чтобы позволить им брать ту меньше аргумента, чем ранее.
, Например, в F# можно определить функциональный thus:-
let f x y z = x + y + z
, Здесь функционируют, f берет параметры x, y и z и суммирует их вместе Возвраты so:-
f 1 2 3
6.
Из нашего определения мы можем, может поэтому определить функцию карри для f:-
let curry f = fun x -> f x
, Где 'забава x-> f x' является функцией лямбды equivilent к x => f (x) в C#. Эта функция вводит функцию, которую Вы хотите приправить карри, и возвращает функцию, которая берет отдельный аргумент и возвращает указанную функцию с первым набором аргумента к входному параметру.
Используя наш предыдущий пример мы можем получить карри f thus:-
let curryf = curry f
, Мы можем тогда сделать following:-
let f1 = curryf 1
, Который предоставляет нам функцию f1, который является equivilent к f1 y z = 1 + y + z. Это означает, что мы можем сделать following:-
f1 2 3
, Который возвращается 6.
Этот процесс часто путается с 'частичным функциональным приложением', которое может быть определенным thus:-
let papply f x = f x
, Хотя мы можем расширить его больше чем до одного параметра, т.е..:-
let papply2 f x y = f x y
let papply3 f x y z = f x y z
etc.
А частичное приложение возьмет функцию и параметр (параметры) и возвратит функцию, которая требует одного или нескольких меньшего количества параметров, и поскольку предыдущие два шоу в качестве примера реализованы непосредственно в стандартном определении функции F#, таким образом, мы могли достигнуть предыдущего thus:-
let f1 = f 1
f1 2 3
результата, Который возвратит результат 6.
В conclusion:-
различие между приправлением карри и частичным функциональным приложением является that:-
Приправляющие карри взятия функция и обеспечивает новую функцию, принимающую отдельный аргумент и возвращающую указанную функцию с ее первым набором аргумента к тому аргументу. Это позволяет нам представлять функции с несколькими параметрами как серия функций отдельного аргумента . Example:-
let f x y z = x + y + z
let curryf = curry f
let f1 = curryf 1
let f2 = curryf 2
f1 2 3
6
f2 1 3
6
Частичное функциональное приложение является более прямым - оно берет функцию и один или несколько аргументов и возвращает функцию с первым n набором аргументов к n определенным аргументам. Example:-
let f x y z = x + y + z
let f1 = f 1
let f2 = f 2
f1 2 3
6
f2 1 3
6
если вы работаете в Windows, вы также можете заглянуть в virtualdub. http://www.virtualdub.org/
он может создавать AVI из BMP, PNG и т. Д.
FFMPEG может создавать файл фильма из серии файлов изображений, эта ссылка на их руководство показывает пример:
http://ffmpeg.org/ffmpeg-doc.html # SEC5
Что касается программно-масштабного создания файла фильма без сторонних библиотек ... это будет немного сложнее. Многие форматы фильмов чрезвычайно сложны, и создание одного без существующей библиотеки было бы довольно болезненным (если только я неправильно истолковал ваш вопрос, и вы на самом деле не спрашиваете о создании настоящего кодировщика)
Если я не неправильно истолковал ваш вопрос, сделайте может быть осуществима простая реализация кодека фильмов на основе YUV. Я знаю, что HuffYUV может быть не слишком сложным.
Две вещи:
На ум приходит несколько решений:
Вам не важен размер, но вы заботятся о качестве. Первое, что я хотел бы спросить себя: неужели вы действительно не заботитесь о размере? Большинство видеоформатов (особенно H.264) дадут вам отличное качество при существенно меньшем размере файла (например, 10x). Вы почти не заметите разницы. Да, ваш контент в HD, но HD-контент на ТВ или Blu-ray также сжимается (с использованием H.264 или VC-1), и этого достаточно для всех остальных. Так что я бы серьезно рассмотрел это как вариант, поскольку он значительно упрощает остальное.
Если хотите, вы всегда можете прибегнуть к формату видео без потерь, например HuffYUV . Это, по крайней мере, даст вам некоторое сжатие при сокращении размера ваших видеоданных вдвое (или более).
Как я уже сказал, используя закодированный видеоформат, вы теряете прозрачность. Если вы хотите сохранить прозрачность и по-прежнему не заботитесь о размере файла, почему бы не сохранить PNG и не отображать их как очень быстрое слайд-шоу в вашем приложении? Если ваша единственная проблема с этим - требования к памяти для одновременной загрузки всех PNG в память ... не делайте этого. Прочтите на пару кадров вперед (фиксированное количество или насколько позволяет память), и как только вы отобразите кадр, удалите его из памяти и прочтите новый кадр вперед. Таким образом вы получите идеальное качество и постоянные требования к памяти. Единственная проблема заключается в том, что ваш диск и процессор должны поддерживать скорость чтения 30 PNG в секунду (или какой у вас частота кадров).
Кроме того, если 5000 отдельных файлов изображений станут слишком громоздкими для обработки , вы можете обернуть их все в пользовательский формат файла. На ум приходит ZIP-файл как простой переносимый формат, или вы можете создать свой собственный.
Единственная проблема заключается в том, что ваш диск и процессор должны быть в состоянии поддерживать скорость чтения 30 PNG в секунду (или независимо от вашей частоты кадров).Кроме того, если 5000 отдельных файлов изображений станут слишком громоздкими для обработки , вы можете обернуть их все в какой-либо пользовательский формат файла. На ум приходит ZIP-файл как простой переносимый формат, или вы можете создать свой собственный.
Единственная проблема заключается в том, что ваш диск и процессор должны быть в состоянии поддерживать скорость чтения 30 PNG в секунду (или независимо от вашей частоты кадров).Кроме того, если 5000 отдельных файлов изображений станут слишком громоздкими для обработки , вы можете обернуть их все в какой-либо пользовательский формат файла. На ум приходит ZIP-файл как простой переносимый формат, или вы можете создать свой собственный.
Вы можете делать все, что хотите, с помощью mencoder:
Вот ссылка на эту документацию: Кодирование из нескольких файлов входных изображений (JPEG, PNG, TGA и т. Д.)
О прозрачности: я не думаю, что есть видеокодек, поддерживающий прозрачность, так что вам здесь не повезло ...