Canvas - это круто! - страница 31

 
Nikolai Semko:

Спасибо, Андрей :)

Я поясню, Андрей, свои логические рассуждения на Ваш вопрос "а в видео можно сохранять?".
Прежде чем отвечать на любой вопрос, я пытаюсь понять доступными средствами, кто задает вопрос и его уровень. Чтобы, во-первых, более правильно и понятно выстроить свой ответ, а, во-вторых, понять смысл очень нечеткого вопроса, дабы не отвечать вопросом на вопрос.
Понятное дело - я зашел в Ваш профиль.
  • Если бы я там увидел рейтинг скажем 162 и на форуме 2-5 месяцев, то я понял бы, что вопрос задает новичок.
И ответил бы просто: " В данный момент в МТ5 сохранение видео не реализовано, но при желании все можно сделать".
  • Но я помню, что Ваше имя часто попадалось мне на форуме и из Вашего профиля я понял, что имею дело с опытным программистом, который на форуме уже более 10 лет, который в раз 5 больше меня имеет колличество сообщений и в его арсенале, как минимум, одна статья, 5 выполенных работ и три кода в КБ, да и рейтинг выше моего более чем в 2 раза.
Значит Вы, подумал я, очень хорошо ориентируетесь в возможностях МТ5 и не хуже меня знаете документацию и делаю вывод, что Ваш вопрос о потенциальной возможности сохранения видео и Вам интересно мое мнение, т.к. я типа шарю в Канвасе.
Поэтому и начал отвечать Вам в формате о потенциальной возможности. 
  • Или Вы просто очередной умник и любитель постебетаться над другими типа "А метлы ваши летать умеют".

Но стебщики меня особо не волнуют, т.к., как правило - это люди, считающие себя очень умными, но по факту очень неумные и неуклюжие, против которых, как правило, достаточно легкий приёмчик из психологического айкидо и они грохаются под общий хохот.


ЗЫ А насчет Луны Ваш ответ НЕТ меня улыбнул. Знайте - это Ваш правильный ответ. Мой "неправильный" ответ на такой вопрос опять же будет разным в зависимости от того, кто задает мне этот вопрос.



Философствовать можно очень много и очень долго, но смысл того вопроса был на поверхности и понятен сразу, четко и однозначно. И в ответ на этот вопрос нести что-то про запись видео с экрана... это нечто)) если вы так любите размышлять про уровни. И при чем тут документация к МТ5?

 
Dmitry Fedoseev:

А знаете ли, здесь еще сто лет назад Зорро продемонстрировал воспроизведение анимированного гифа через канвас. Не какого непонятного зацикленного видеоряда, а обыкновенного анимированного гифа.

Не знал. Для этого нужно разобраться в формате гиф и препарировать его и сформировать кадры. Не думаю, что это очень сложно. Зато тогда легко и записывать стандартные гибки можно, если с форматом разобраться.
 
Nikolai Semko:
Не знал. Для этого нужно разобраться в формате гиф и препарировать его и сформировать кадры. Не думаю, что это очень сложно. Зато тогда легко и записывать стандартные гибки можно, если с форматом разобраться.

Так же не сложно как и avi, если без сжатия. И то и то не сложно, только надо знать как, но пока никто не знает. Кажется с гифом разобраться шансов больше.

Лучше обратить внимание вот на этот совет. Потому что, даже если и разобраться с созданием видео без сжатия, далеко не уедешь, слишком огромные размеры файлов будут.

 
Nikolai Semko:
 Почему Вы так решили? 

Судя по ответу.

 
Когда я думаю про видео, я думаю про алгоритм его уплотнения, т.е. про кодеки,  иначе это детские игрушки 
 

Есть еще один вариант, и пожалуй он будет самым интересным и полезным. Win API: AVIFileOpen(), AVIFileCreateStream() и т.д.

 
Nikolai Semko:

Первые эксперименты с динамическим таймфреймом.

пара EURUSD вся история в динамике:

.

Фрактальность налицо.

норм

снизу рейку надо для выбора окна и масштаба


 
Nikolai Semko:

Спасибо, Андрей :)

Я поясню, Андрей, свои логические рассуждения на Ваш вопрос "а в видео можно сохранять?".
Прежде чем отвечать на любой вопрос, я пытаюсь понять доступными средствами, кто задает вопрос и его уровень. Чтобы, во-первых, более правильно и понятно выстроить свой ответ, а, во-вторых, понять смысл очень нечеткого вопроса, дабы не отвечать вопросом на вопрос.
Понятное дело - я зашел в Ваш профиль.
  • Если бы я там увидел рейтинг скажем 162 и на форуме 2-5 месяцев, то я понял бы, что вопрос задает новичок.
И ответил бы просто: " В данный момент в МТ5 сохранение видео не реализовано, но при желании все можно сделать".
  • Но я помню, что Ваше имя часто попадалось мне на форуме и из Вашего профиля я понял, что имею дело с опытным программистом, который на форуме уже более 10 лет, который в раз 5 больше меня имеет колличество сообщений и в его арсенале, как минимум, одна статья, 5 выполенных работ и три кода в КБ, да и рейтинг выше моего более чем в 2 раза.
Значит Вы, подумал я, очень хорошо ориентируетесь в возможностях МТ5 и не хуже меня знаете документацию и делаю вывод, что Ваш вопрос о потенциальной возможности сохранения видео и Вам интересно мое мнение, т.к. я типа шарю в Канвасе.
Поэтому и начал отвечать Вам в формате о потенциальной возможности. 
  • Или Вы просто очередной умник и любитель постебетаться над другими типа "А метлы ваши летать умеют".

Но стебщики меня особо не волнуют, т.к., как правило - это люди, считающие себя очень умными, но по факту очень неумные и неуклюжие, против которых, как правило, достаточно легкий приёмчик из психологического айкидо и они грохаются под общий хохот.


ЗЫ А насчет Луны Ваш ответ НЕТ меня улыбнул. Знайте - это Ваш правильный ответ. Мой "неправильный" ответ на такой вопрос опять же будет разным в зависимости от того, кто задает мне этот вопрос.



 
Nikolai Semko:

...
А ты как кадры собираешь?
Я не понял,  как ты снимаешь код из МЕ.
Если это даже просто через скриншоты, то всё равно молодец, т.к. вижу что они упакованы.
Твоя работа заслуживает внимания.

ЗЫ Ветку хоть и я создал и как-то исторически больше сложилось, что её веду, т.к. канвас для меня что-то хобби и отыха.
Но я не чувствую здесь себя хозяином и что здесь какая-то приватная территория. Двери открыты. Всех милости просим. Всем рады. И даже троллям, ибо они иногда драйв дают. :)

Спасибо, Николай.

//------------------------------

Подготовка кадров:

1. Кадры собираю в простом редакторе "FastStone", делая скриншоты нужной области, либо снимаю клип с Camtasia, и переношу кадры в FastStone.

2. Кадры обрабатываю (добавляю тени, стрелки, тексты) и сохраняю в формате .bmp в папке Images\MyGif (у каждого гифа своя подпапка).

3. Имена кадров должны быть "1.bmp", "2.bmp", "3.bmp",...  Это необходимо для работы скрипта создающего Гиф. 

4. Открываю скрипт в МЕ и через #resource интегрирую все кадры.

//-------------------------------

Принцип работы скрипта:

1. Скрипт осуществляет цикл по кадрам и читает их через ReasourceReadImage. 

2. Скрипт загружает сразу два кадра, - новый и предыдущий: 1 и 2, потом, 2 и 3, потом 3 и 4.... И сравнивает цвета пикселей в новом кадре и предыдущем. Если цвет изменился, скрипт записывает номер пикселя и его новый цвет в массив. Таким образом, записываются только те пиксели и цвета, которые изменились с предыдущего кадра. Если цвет пикселя после первого кадра не меняется, то пиксель с этим цветом будет записан один раз. Это первый механизм сжатия.

3. Второй механизм сжатия: укорачиваются ряды с пикселями имеющими одинаковый цвет. Если в ряду пикселей есть непрерывно повторяющийся цвет от пикселя к пикселю, то скрипт запускает цикл подсчета повторений и записывает в массив номер стартового пикселя (с которого началась последовательность повторений, цвет и кол-во повторений).

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

//-------------------------------- 

Механизм воспроизведения гифа:

1. Каждый гиф имеет несколько свойств: начало в массиве гифов, количество кадров, размер кадров, пауза между кадрами.

2. Специальный блок делает цикл по объектам ядра и ищет свойство гифа. Блок проверяет:

  • Наличие гифа у элемента
  • Явлен ли элемент или скрыт
  • Находится ли элемент в зоне видимости

Если проверки пройдены, блок обращается к массиву гифов по адресу конкретного гифа, смотрит на:

  • счетчик кадров
  • счетчик выдержки паузы

Если эти проверки пройдены, блок переходит к чтению гифа:

1. Блок загружает канвас на котором рисуется гиф.

2. Блок считывает текущий кадр и распаковывает его:

  • Находит нужные пиксели по номерам и рассчитывает их положение в общем канвасе.
  • Рисует пиксели нужного цвета в нужном месте.
  • "Распаковывает" последовательность пикселей с одним цветом.

Блок двигается не только по кадрам, отсчитывая паузу между ними, но и по разным гифам разных элементов в разных окнах, пропуская те гифы, которые скрыты за зоной видимости или в закрытых окнах.

//--------------------------

Вот такая работа. Думал все просто, но рассказывая, сам немного "офигел" от сложности :). 

  
ЗЫ. Гиф с размером картинок 800*600 сжимается до 20 и более раз. Если бы мне удалось записать все в массиве char, то сжатие увеличилось бы еще в 4 раза. Но, это определенно повлечет обеднение цветовой палитры.
 
Но "гиф" тут причем?
Причина обращения: