kgena_ua, при попытке замены gr.DrawImage на gr.GdiDrawBitmap выдаёт ошибку.
- Спойлер
Список разделов › foobar2000 › Общая информация




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



То есть скрипт, сохраняя пропорции, подгоняет изображение под ширину панели, игнорируя высоту, я правильно понимаю?LUR:положение обложки может вылазить за пределы панели
Этот скрипт писал не я, мои познания на данном поприще весьма минимальные.LUR:скрипт довольно кривой у вас
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);
}



$findfile($replace(%path%,%filename_ext%,)\Covers\artist.*,$replace(%path%,%filename_ext%,)\Cover\artist.*,$replace(%path%,%filename_ext%,)..\Artwork\artist.*,$replace(%path%,%filename_ext%,)artist.*)
 
 // Глобальная переменная поиска внешней обложки.
$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))
        )
,
)
