Отображение вшитой обложки под типом Artist на PSS.

Список разделов foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 megane68 » 07.03.2015, 20:36

Нужно отобразить вшитую обложку с типом Artist, а при отсутствии вшитой из папки Artwork\artist.*.
Сейчас реализовано из папки Artwork через глобальную переменную:
Код: Выделить всё
$set_ps_global(do.artist.pic,$directory_path(%path%)\..\Artwork\artist.*)
Положение через:
Код: Выделить всё
$ifequal(%do.playlist.switch%,1,
        $if(%ps_isplaying%,
                $drawimage($get(center.x),120,$get(center.w),$sub(%ps_height%,119),%do.artist.pic%,wc,,50)
        )
,
)
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #2 megane68 » 08.03.2015, 15:05

Немного изменю постановку вопроса.
Возможно ли в цепочку переменных $findfile() добавить вшитую обложку?
Код: Выделить всё
$findfile($replace(%path%,%filename_ext%,)\Covers\artist.*,$replace(%path%,%filename_ext%,)\Cover\artist.*,$replace(%path%,%filename_ext%,)..\Artwork\artist.*,$replace(%path%,%filename_ext%,)artist.*)
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #3 kgena_ua » 08.03.2015, 20:59

megane68, вывести вшитую обложку средством PSS не получится.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #4 megane68 » 08.03.2015, 21:06

kgena_ua:вывести вшитую обложку средством PSS не получится.
Я вывожу и даже в Title Formatting PSS прописана для этого функция $imageabs().
Код: Выделить всё
$imageabs(10,10,50,50,%path%,artreader)
Вопрос в другом, чтобы за неимением вшитой обложки, выводились внешние обложки.

Сейчас поиск делается по разным путям, но вшитую обложку я не могу указать.
Код: Выделить всё
$findfile($replace(%path%,%filename_ext%,)\Covers\artist.*,$replace(%path%,%filename_ext%,)\Cover\artist.*,$replace(%path%,%filename_ext%,)..\Artwork\artist.*,$replace(%path%,%filename_ext%,)artist.*)
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #5 kgena_ua » 08.03.2015, 21:39

megane68,
может быть через
$if3(
$imageabs(10,10,50,50,%path%,artreader)
,
,,,,,,,,,,,,,,,,,
)
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #6 megane68 » 08.03.2015, 22:38

kgena_ua:может быть через
$if3(
Скорее через $if2(), не?
Сейчас реализовано через две функции. Не устраивает, что если вшитая и внешная обложки есть в наличии, то они отображаются обе. На практике это выражается в том, что фоновая картинка становится в два раза ярче.
Код: Выделить всё
$ifequal(%do.playlist.switch%,1,
        $if(%ps_isplaying%,
                $drawimage($get(center.x),120,$get(center.w),$sub(%ps_height%,119),%do.artist.pic%,wc,,50)
        )
,
)

$ifequal(%do.playlist.switch%,1,
        $if(%ps_isplaying%,
                $drawimage($get(center.x),120,$get(center.w),$sub(%ps_height%,119),%path%,artreader_artist,,50)
        )
,
)
Где %do.artist.pic% - глобальная переменная с перечнем путей для внешних обложек.

Как объединить эти два условия, чтобы было сравнение правда/ложь?

Добавлено спустя 8 минут 31 секунду:
Короче, получилось так:
Код: Выделить всё
// Глобальная переменная поиска внешней обложки.

$set_ps_global(do.artist.pic,$findfile($replace(%path%,%filename_ext%,)\Covers\artist.*,$replace(%path%,%filename_ext%,)\Cover\artist.*,$replace(%path%,%filename_ext%,)..\Artwork\artist.*,$replace(%path%,%filename_ext%,)artist.*))

// Отображение внешней или вшитой обложки.

$ifequal(%do.playlist.switch%,1,
        $if(%ps_isplaying%,
                $if2($drawimage($get(center.x),120,$get(center.w),$sub(%ps_height%,119),%do.artist.pic%,wc,,50),
                         $drawimage($get(center.x),120,$get(center.w),$sub(%ps_height%,119),%path%,artreader_artist,,50))
        )
,
)

Ура!!!
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #7 megane68 » 16.03.2015, 18:11

Теперь столкнулся с проблемой получения размеров с вшитой обложки.
Отобразить через $drawimage() я могу, а размеры получить не получается.
Подскажите плиз, как получить размеры с вшитой обложки?
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #8 megane68 » 19.03.2015, 19:47

Куда подевались все корифеи? В отпуск что ли ушли?
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #9 LUR » 19.03.2015, 22:37

megane68, я тоже не знаю, кстати, как получить, а зачем размеры то? Какая задача?
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #10 megane68 » 23.03.2015, 11:52

LUR:я тоже не знаю, кстати, как получить, а зачем размеры то? Какая задача?
Да задача банальная. В моей сборке есть интерфейс DarkOne Universal. Хочу на панелях с ELPlaylist сделать картинку артиста на всю панель с сохранением аспекта, а для этого нужно получить размеры картинки, вычислить аспект и задать кроме ширины панели высоту картинки, иначе картинка будет сдвигаться по вертикали, если размер отличный от квадратного.
Для внешних обложек это не проблема через функцию $getimagewidth и $getimageheight, вычислить пропорции и задать высоту относительно ширины панели %ps_width%.
А вот для вшитой обложки, не получается получить оригинальные размеры картинки. Всё завязано на функции $imageabc, но как через неё получить размер, я х. з., ибо через неё и путь к вшитой картинке задаётся: $drawimage(0,0,%ps_width%,%picture.height%,%path%,artreader_artist,,50)
Вот так должно выглядеть
Изображение
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #11 LUR » 23.03.2015, 13:33

megane68, так вроде ж не нужны там размеры. Есть же imageabs_rc, а для нее фактически нужно знать только конечный размер. У меня в сборке рисуется так:
Код: Выделить всё
$puts(artwidth,$sub(%ps_width%, 320))
$puts(artheight,$sub(%ps_height%, 100))
$ifgreater($get(artwidth),$get(artheight),
   $imageabs_rc($get(artwidth),$get(artwidth),0,$div($sub($get(artwidth),$get(artheight)),2),$get(artwidth),$get(artheight),0,70,%path%,artreader,,20),
   $imageabs_rc($get(artheight),$get(artheight),$div($sub($get(artheight),$get(artwidth)),2),0,$get(artwidth),$get(artheight),0,70,%path%,artreader,,20)
)

т.е. я вычисляю конечный размер области, куда рисуется обложка, а потом рисую через imageabs_rc. Тут я просто смотрю, если картинка неквадратная, то центрирую для сохранения аспекта. Впрочем функция imageabs_rc для этого и предназначена.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #12 megane68 » 23.03.2015, 16:11

LUR:У меня в сборке рисуется так
Чот у тебя минус к ширине 320 пикселей, а к высоте - 100 пикселей.
Ты как раз от этого и отталкивается. У тебя 320 и 100 px являются статичными, а мне надо в зависимости от ширины плейлиста.
То есть картинка отображается по ширине ELP, а по высоте может уходить за пределы панели. Главное, чтобы подложенная картинка была на весь ELP.
В общем мне надо из оригинальных размеров картинки вычислить аспект, чтобы получить высоту отображаемой картинки.
Код: Выделить всё
// Путь к картинке:
$set_ps_global(do.artist.pic,$findfile($replace(%path%,%filename_ext%,)\Covers\artist.*,$replace(%path%,%filename_ext%,)\Covers\%artist%.*,$replace(%path%,%filename_ext%,)\Cover\artist.*,$replace(%path%,%filename_ext%,)\Cover\%artist%.*,$replace(%path%,%filename_ext%,)..\Artwork\artist.*,$replace(%path%,%filename_ext%,)..\..\Artwork\%artist%.*,$replace(%path%,%filename_ext%,)..\..\..\Artwork\%artist%.*,$replace(%path%,%filename_ext%,)..\Artwork\%artist%.*,$replace(%path%,%filename_ext%,)Artwork\artist.*,$replace(%path%,%filename_ext%,)Artwork\%artist%.*,$replace(%path%,%filename_ext%,)artist.*,$replace(%path%,%filename_ext%,)%artist%.*))

// Получение нужной ширины картинки. Равна ширине ELPlaylist:
$set_ps_global(do.pic.widht.1,$sub(%ps_width%,290))

// Получение оригинальных размеров картинки:
$set_ps_global(do.width.pic,$getimagewidth(%do.artist.pic%))
$set_ps_global(do.height.pic,$getimageheight(%do.artist.pic%))

// Вычисление высоты отображаемой картинки:
$set_ps_global(aspect.ratio,$div($mul(%do.height.pic%,1000),%do.width.pic%))
$set_ps_global(picture.height,$div($mul(%do.pic.widht.1%,%aspect.ratio%),1000))

//Отображение картинки:
$ifequal(%do.playlist.switch%,1,
        $if(%ps_isplaying%,
                   $drawimage(290,0,%do.pic.widht.1%,%picture.height%,%do.artist.pic%,wc,,50)))
Это для внешней картинки.
Если же применять этот сценарий к вшитой обложке, то я не могу указать путь к картинке, чтобы получить её размеры.
Размеры картинки я получаю, указывая путь к картинке и получаю переменную %do.artist.pic%. Из неё получаю ширину и высоту, а вот к вшитой обложке я путь не могу указать в $set_ps_global(do.artist.pic,...........), чтобы размеры увидеть.
Таким образом получается, что упирается всё в получение переменной %do.artist.pic% для вшитой обложки, чтобы получить оригинальные размеры картинки.
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #13 LUR » 23.03.2015, 21:24

megane68, блин, при чем здесь мои "статичные" 320 и 100?)) Тогда у тебя твои статичные 290!))
Код: Выделить всё
// Получение нужной ширины картинки. Равна ширине ELPlaylist:
$set_ps_global(do.pic.widht.1,$sub(%ps_width%,290))
По ходу ты просто не въезжаешь, что тебе не нужно искать аспект. И не нужно искать исходные размеры картинки. Просто для примера возьми мою сборку и посмотри как там сделано. И внимательно почитай про функцию imageabs_rc, это именно то, что тебе нужно. Есть такой эффект в программировании, когда вцепишься в идею и не хочешь отпускать. Отпусти. Поясню то, что есть в документации, но как оно на самом деле работает.
Код: Выделить всё
$imageabs_rc(rw,rh,srcx,srcy,srcw,srch,x,y,path,OPTIONS,n,alpha,OPTIONS2)
rw, rh - конечный размер изображения. Понятно, что вычислить ты ширину можешь, но тебе и высота надо, для этого ты так отчаянно ищешь аспект. Фокус в том, что ты можешь в качестве rh указать что угодно, оно все равно сохранит аспект, если не выставить в OPTIONS опцию nokeepaspect. Далее srcx, srcy, srcw, srch - это область которая именно рисуется. Она в конечных координатах, т.е. область уже после масштабирования. Если хочешь всегда рисовать с левого верхнего угла картинку ставишь srcx, srcy в нули. Я в своей сборке смещаю по условию, например. srcw, srch по сути тот же смысл, что и rw, rh, я вобще без заморочек задаю полную ширину независимо от начала вывода, оно все равно рисует правильно. x, y - это координаты самого PSS, откуда выводить собственно изображение. Короче не понимаю проблемы вообще.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #14 megane68 » 23.03.2015, 22:21

LUR:Короче не понимаю проблемы вообще.
То, что я до сих пор пробовал не подходит ибо начинает масштабировать картинку под панель. То есть, если я не задаю высоту или задаю её не такую как надо, то картинка масштабируется под меньшую сторону. Будет высота меньше - картинка будет масштабироваться под высоту.
Мне же надо, чтобы масштабировалась только под ширину, а высота пусть выходит за границы панели.
Вот в чем проблема.
imageabc пробовал, а RC пока не. Посмотрю как в твоей сборке, а то так то не очень догоняю его работу.
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #15 kgena_ua » 23.03.2015, 23:45

LUR:Есть же imageabs_rc
Код: Выделить всё
$imageabs_rc($get(width_show),10000,0,0,$get(width_show),10000,$get(col_show),$get(row_show),%path%,artreader,nokeepaspect,80)   
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #16 LUR » 23.03.2015, 23:50

kgena_ua, это чо за экзампл, да еще без сохранения аспекта?
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #17 kgena_ua » 24.03.2015, 00:07

LUR:без сохранения аспекта
Это как :smile:
А по поводу экзампла, просто попробовал в PSS вывести artreader с заданной шириной - все нормально работает. Действительно, кроме как через $imageabs_rc не получится. Размеры встроенной обложки не нужны.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #18 LUR » 24.03.2015, 00:13

kgena_ua:Это как
Я просто увидел слово nokeepaspect, вот и подумал, что без сохранения соотношения сторон выводится картинка, но был невнимателен - тут просто неверно заданы опции (через запятую) поэтому это слово проигнорится движком, подумает, что это следующий параметр поворота картинки)
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #19 megane68 » 24.03.2015, 00:17

kgena_ua, да, да.
Объясни плиз, что такое $get(width_show).
Значение width_show откуда берётся? Что за высота такая 10000?
Посмотри внимательно на скриншот из поста /viewtopic.php?t=5596&p=55373#p55373
Картинка сохраняется в аспекте, растянута по ширине на весь плейлист, имеет координату по X = 290, по Y = 0 - ВСЕГДА.
По высоте, выходит всегда за пределы панели, но не изменяясь в координатах X и Y какой бы размер картинки не был, квадратный или прямоугольный.

P.S. Я вычисляю аспект, чтобы узнать высоту картинки не просто так, а чтобы независимо от того, квадратная или прямоугольная картинка, она всегда бы отображалась в координатах 290 px и 0 px по X и Y соответственно.
Если не задавать высоту картинки исходя из аспекта, то получим картинку масштабированную под высоту/ширину панели по меньшей стороне или получим сдвиг прямоугольной картинки по оси Y.
megane68 M
Автор темы
Репутация: -18
С нами: 15 лет 1 месяц

Сообщение #20 kgena_ua » 24.03.2015, 00:40

LUR, а вот так поворот ....%path%,artreader,90,50), не понятно.
megane68, это подставил из своего скрипта. width_show это ширина панели на которую хотим вывести изображения, а высоту выводимого изображения поставил с запасом (10000) - выведет с правильными пропорциями.
Вот результат при изменении высоты окна;
Спойлер
Безымянный.jpg
Последний раз редактировалось kgena_ua 24.03.2015, 00:50, всего редактировалось 1 раз.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

След.

Вернуться в Есть вопрос!