"Бегущая Строка" - алгоритм подсчета времени показ

Здесь обсуждаются любые продукты компании СофтЛаб-НСК для телевизионного вещания (Форвард Т, Форвард ТС, Форвард Голкипер, Форвард Рефери, Форвард Офис, Форвард Инжест)

Модераторы: Людмила, PR, vd, Даниленко Сергей

Ответить
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

"Бегущая Строка" - алгоритм подсчета времени показ

Сообщение Евгений Веревкин »

Вопрос следующий:

есть титровальный объект "Бегущая строка". Хотелось бы получить алгоритм подсчета времени показа строки на экране. Т.е. в идеале - тот алгоритм, согласно которому подсчитывается время в окошке "Длительность" в своействе объкта в Title Designer'e, в зависимости от входных данных - содержимого файла задания, значений скорости, параметров шрифта, размеров титровального объекта и т.п.

Нужно это для использования в самописной программе приема бегущей строки для подсчета длительности объявления на этапе приема.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

1)бегучку планируете показывать через картинки (*.tga) или через текстовые строки?
2)на чем (язык) пишется ваша программа&
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

Сообщение Евгений Веревкин »

Показывать планируем через .spt файлы с текстовыми строками внутри. Пишем на платформе 1С v8.1
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

В своей работе мы используем СОМ-объекты (component object model). Мы не сильны в программировании на 1С, но насколько мы понимаем там возможность работы с СОМ-ом есть.
Если это действительно так, то можно будет попробовать решить вашу задачу.
1)Есть СОМ в 1С?
2)Вы умеете с ним работать?
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

Сообщение Евгений Веревкин »

Хм... А обязательно так сложно? Просто формулы нету? Вида

Время = f(Длина строки, Скорость движения, Размеры области вывода,...)
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Все было бы просто если бы вы использовали в качестве задания для бегущей строки картинку (т.е. из текста создавали бы картинку с этим текстом). Длина картинки известна, соответственно все остальное рассчитывается с помощью достаточно простой формулы. Но и тут есть проблема - как узнать длину картинки? У нас как раз это делается через наши СОМ-объекты.
Гораздо сложнее дело обстоит если в качестве задания для бегущей строки вы используете текст. В этом случае задание для бегучки генерится "на лету". Поэтому для получения размера изображения как раз и нужны СОМ-объекты. Они позволяют получить размер объявления с учетом стиля объявления.
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

Сообщение Евгений Веревкин »

Давайте попробуем с СОМ... Научусь, куда деваться :-)
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

На С++ мы бы сделали примерно так:

/* Подключение объекта DDSString (содержится в C:\Program Files\Common Files\SoftLab-Nsk\DDSString.dll)
*/

#import "libid:2EDA011D-CCB1-4C0A-9C84-2569D5504D9A" no_namespace named_guids raw_interfaces_only

/*
Загрузка колекции стилей "fileName", которая используется для показа объявлений. Естественно, что эту процедуру можно делать один раз
*/

CComPtr<IDDSStringObj> spIDDSStringObj;
HRESULT hr = spIDDSStringObj.CoCreateInstance(CLSID_DDSStringObj);
hr = spIDDSStringObj->LoadStyleCollection(CComBSTR(fileName));
hr = spIDDSStringObj->get_StyleCount(&nStyleCount);

/*
Получение размеров картинки: стиль-styleIndex, строка с объявлением -name.
*/
hr = spIDDSStringObj->put_SelectedStyleIndex(styleIndex);
hr = spIDDSStringObj->SetString(CComBSTR(name));
CRect rcBlackArea;
hr = spIDDSStringObj->GetBlackAreaRect(&rcBlackArea, TRUE);

/*
В прямоугольнике rcBlackArea возвращается размеры картинки с объявлением.
*/


Как это делать на 1С мы не знаем. :oops: :oops:

Если вы пройдете этот этап - до получения прямоугольника по строчке текста, то мы можно продолжать дальше.
Хабаров Виталий
Сообщения: 56
Зарегистрирован: 18 апр 2009 15:19
Откуда: Электросталь
Контактная информация:

Сообщение Хабаров Виталий »

Наш метод.

1. Просчитываем строчку в TGA-последовательность.
(получаем набор файлов TGA и SPT)
2. Загоняем SPT-файл в Roll Emulator.
(через команду Загрузить)
3. Выставляем скорость 6, получаем длину строки в секундах.
4. Выставляем отступ окна сверху 98%
5. Нажимаем Сохранить.

Строка готова!
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

2. Загоняем SPT-файл в Roll Emulator.
(через команду Загрузить)
К сожалению, данный способ подходит только для "старых" титров. Т.е. для тех, которые не используют титровальный проект из TitleDesigner
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

Сообщение Евгений Веревкин »

Возник вопрос по ходу разборки кода. В моей реализации DDSString.dll я не нашел метода get_StyleCount, зато нашел свойство StyleCount типа long. Это в пример закралась ошибка, или я чего-то недопонял? Версия библиотеки 1.0.5.5.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Это разный синтаксис вызова. В вашем случае (видимо, как и при вызове из скриптовых языков) нужно именно через свойство получать/устанавливать значение (просто получать либо присваивать его значение).

В программе на C++ это же делается через вызов функций get_StyleCount и put_StyleCount.

То же относится и ко всем другим подобным случаям, т.е. синтаксис получения значения других свойств аналогичен.
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

Сообщение Евгений Веревкин »

Эх... Был бы еще в 1С-ке тип CRect... Все получилось остальное - а вот переменную для возврата в неё данных метод GetBlackAreaRect хочет именно такого типа...

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

Я как бы параллельно пытаюсь написать какую-нить прокладку между 1С и DLL-кой этой - внешнюю компоненту, или еще чего - пока не определился. Но если у Вас есть возможность сделать это быстро и просто - буду признателен :-)
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Нельзя ли как-нибудь модифицировать DLL-ку эту, чтобы она отдавала длину и высоту прямоугольника в виде свойств? Или в параметрах процедуры, только чтобы они были простого типа?
Ваше желание понятно, но обычно в таких ситуациях поступают по другому. А именно - пишут библиотеку-прокладку, которая понимает один тип данны (Rect), но возвращает его в виде набора других типов (INT). Впрочем про это вы сами написали.
Евгений Веревкин
Сообщения: 150
Зарегистрирован: 22 янв 2008 08:51
Откуда: Новокузнецк

Сообщение Евгений Веревкин »

Практически получилось. То есть до параметров прямоугольника я добраться могу теперь. Осталось реализовать алгоритм расчета времени прохода бегущей строки.
Ответить