Обложки (cover)

Список разделов foobar2000 Общая информация

Описание: Общее обсуждение по аудиоплееру foobar2000

Сообщение #81 Cerber » 18.07.2014, 03:17

LUR, при Вашей конфигурации почему-то не сохраняются пропорции... Но изображение чётче. Всё, как я писал выше.

kgena_ua, при попытке замены gr.DrawImage на gr.GdiDrawBitmap выдаёт ошибку.

Спойлер
5632135343432.jpg
Cerber M
Аватара
Репутация: 1
С нами: 9 лет 8 месяцев

Сообщение #82 LUR » 18.07.2014, 04:39

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

Сообщение #83 kgena_ua » 18.07.2014, 07:16

Cerber, Ваш первый скрипт нормально работает если вставить туда перерасчет для пропорционального вывода.
Код: Выделить всё
var g_img_default = gdi.Image(fb.FoobarPath + "images/similar_wmp_mod/nocover.png");
//var g_img_default = gdi.Image(fb.FoobarPath + "\\maybe\\textures\\nocover\\nocover 2.png");
var WshShell = new ActiveXObject("WScript.Shell");
var g_focus_metadb = null;

function on_paint(gr){
    g_focus_metadb = fb.GetFocusItem();
    if(g_focus_metadb==null){
        var g_img = g_img_default;
        gr.FillSolidRect(0, 0, window.Width, window.Height, window.GetColorCUI(3));
    }
    else{
        var g_img = utils.GetAlbumArtV2(g_focus_metadb, 0);
        if (g_img==null){
            g_img = g_img_default;
            gr.FillSolidRect(0, 0, window.Width, window.Height, window.GetColorCUI(3));
        }
    }
   
    var scale_w = ww / g_img.Width;
    var scale_h = wh / g_img.Height;
    var scale = Math.min(scale_w, scale_h);
    var pos_x = 0;
    var pos_y = 0;

    if (scale_w < scale_h) pos_y = (wh - g_img.Height * scale) / 2;
    else if (scale_w > scale_h) pos_x = (ww - g_img.Width * scale) / 2;
   
    g_img = g_img.CreateRawBitmap();
    gr.GdiDrawBitmap(g_img, pos_x, pos_y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
}

function on_item_focus_change(){
    window.Repaint();
}

function on_mouse_lbtn_dblclk(){
    if(g_focus_metadb==null) {} else utils.GetAlbumArtAsync(window.ID, g_focus_metadb, 0);
}

function on_get_album_art_done(metadb, art_id, image, image_path){
    switch (image_path){
        case "": break;
        case fb.TitleFormat("%path%").EvalWithMetadb(metadb): break;
        default: WshShell.run('"'+image_path+'"');
    }
}

function on_size(){
    ww = window.Width;
    wh = window.Height;
}

//EOF
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #84 LUR » 18.07.2014, 20:19

kgena_ua, и все-таки арифметика со scale абсолютно лишняя.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #85 Cerber » 18.07.2014, 23:22

LUR:положение обложки может вылазить за пределы панели
То есть скрипт, сохраняя пропорции, подгоняет изображение под ширину панели, игнорируя высоту, я правильно понимаю?
LUR:скрипт довольно кривой у вас
Этот скрипт писал не я, мои познания на данном поприще весьма минимальные.

kgena_ua, function on_paint(gr) работает и во втором скрипте, но пропадает смена изображений при переключении воспроизведения, а также изображения сменяются не плавно (хоть это не обязательное условие, но всё же). Возможно ли как-то их совместить? Я всякое перепробовал, но желаемого результата не получил.
Вот функция из второго скрипта:

Код: Выделить всё
function on_paint(gr) {
    gr.FillSolidRect(0, 0, ww, wh, dui ==1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
    var Img, size;
    if (Img = CurImage) {
        currentopacity = opacity;
        size = CurSize;
        gr.DrawImage(Img, size.x, size.y, size.width, size.height, 0, 0, Img.width, Img.height, 0, opacity);
        }
    if (Img = NewImage) {
        currentopacity = 255-opacity;
        size = NewSize;
        gr.DrawImage(Img, size.x, size.y, size.width, size.height, 0, 0, Img.width, Img.height, 0, 255-opacity);
        }
       
    if(dui == 1) {
        gr.DrawRect(0,0, window.Width, window.Height, 1.0, RGB(160,160,160));
        }
    Buttons.OnPaint && Buttons.OnPaint(gr);
}
Cerber M
Аватара
Репутация: 1
С нами: 9 лет 8 месяцев

Сообщение #86 kgena_ua » 19.07.2014, 08:03

Cerber, если Вы хотите иметь качественный скрипт для отображения обложек, воспользуйтесь скриптом от Максима - сборка s8e.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #87 megane68 » 08.03.2015, 15:10

Возможно ли в цепочку переменных $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.*)

Добавлено спустя 7 часов 51 минуту:
Сам задал вопрос, сам и ответил! :smile:
Отображение внешней и вшитой обложки типа Artist на PSS (Panel Stack Splitter).
Код: Выделить всё
// Глобальная переменная поиска внешней обложки.

$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))
        )
,
)

P.S. Естественно координаты отображения обложки задавайте свои.
megane68 M
Репутация: -18
С нами: 15 лет 1 месяц

Пред.

Вернуться в Общая информация