Avatar billede zebratan Nybegynder
26. november 2009 - 18:32 Der er 4 kommentarer og
1 løsning

"Allow smoothing" på eksternt loadede billeder?

as2/cs3

Jeg er ked af hvis der er nogen der føler jeg spammer ekspertens flash forum lige i øjeblikket, men dette skulle også gerne være det sidste af mine tre spørgsmål. I hvert fald i et stykke tid:)

Jeg har brug for hjælp til at tilføje "allow smoothing" på eksternt loadede billeder for at undgå tydelig reduktion i kvalitet når de enten gøres mindre eller drejes.

Jeg har fundet dette link der formentlig har løsningen, men jeg kan ikke umiddelbart selv få det til at fungere http://www.giordanopiazza.com/blog/flash/allow-smoothing-for-external-images-as2/

Da jeg mildest talt ikke er nogen flashhaj har brug for hjælp til hvordan man gør dette, men også til hvordan dette implementeres/skrives i den kode jeg allerede bruger til at hente billederne...

Det "tomme" movieclip der holder billerne hedder "imageholder"

Her er min kode:
[code]function loadXML(loaded) {
    if (loaded) {
        xmlNode = this.firstChild;
        image = [];
        description = [];
        total = xmlNode.childNodes.length;
        for (i=0; i<total; i++) {
            image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
            description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
        }
        firstImage();
    } else {
        content = "file not loaded!";
    }
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("images.xml");
/////////////////////////////////////
listen = new Object();
listen.onKeyDown = function() {
    if (Key.getCode() == Key.LEFT) {
        prevImage();
    } else if (Key.getCode() == Key.RIGHT) {
        nextImage();
    }
};
Key.addListener(listen);
_root.previous_btn.onRelease = function() {
    prevImage();
};
_root.next_btn.onRelease = function() {
    nextImage();
};
/////////////////////////////////////
p = 0;
this.onEnterFrame = function() {
    filesize = imageholder.getBytesTotal();
    loaded = imageholder.getBytesLoaded();
    preloader._visible = true;
    if (loaded != filesize) {
        preloader.preload_bar._xscale = 100*loaded/filesize;
    } else {
        preloader._visible = false;
        if (imageholder._alpha<100) {
            imageholder._alpha += 10;
        }
    }
};
function nextImage() {
    if (p<(total-1)) {
        p++;
        if (loaded == filesize) {
            imageholder._alpha = 0;
            imageholder.loadMovie(image[p], 1);
            //desc_txt.text = description[p];
            picture_num();
        }
    }
}
function prevImage() {
    if (p>0) {
        p--;
        imageholder._alpha = 0;
        imageholder.loadMovie(image[p], 1);
        //desc_txt.text = description[p];
        picture_num();
    }
}
function firstImage() {
    if (loaded == filesize) {
        imageholder._alpha = 0;
        imageholder.loadMovie(image[0], 1);
        //desc_txt.text = description[0];
        picture_num();
    }
}
function picture_num() {
    current_pos = p+1;
    pos_txt.text = current_pos+" / "+total;
}[/code]
Avatar billede hmanback Nybegynder
26. november 2009 - 18:43 #1
Kan du ikke zippe ALLE(.fla, xml og billeder) relevante filer og smide det op et eller andet sted, så skal jeg gerne kigge på det.
Avatar billede hmanback Nybegynder
26. november 2009 - 19:12 #2
Hold your horses...

imageholder er et tomt movieclip du har placeret på din stage, fra dit Library - korrekt? - og det er selvfølgelig navngivet "imageholder"

Efter ///////////////////////////////////// i din kode tilføj:

imageholder.forceSmoothing = true;

Og se om det hjalp.
Ved at slå forceSmoothing til, skal du være klar over, at det går ud over flash' "render" performance.
Avatar billede zebratan Nybegynder
27. november 2009 - 15:59 #3
Tak for hjælpen igen, hmnaback. Jeg holdede mine horses, men det synes desværre ikke at virke. Det lød ellers så dejlig nemt. Det slår mig i øvrigt at grunden til dette kan være at jeg har tilbageholdt vigtige informationer. "imageholder" befinder sig inde i et andet movieclip og det er faktisk det der skaleres. Det forekommer mig nu ret sikkert at det formentlig er det der skaber hele problematikken. Pokkers!

Hvis du stadig gider kigge på det, så har jeg lavet et forenklet eksempel på situationen her:
http://www.gratisupload.dk/download/36803/

Ps.: det er måske vigtigt at bemærke at imageholder ikke nødvendigvis behøver at ligge inde i det andet movieclip i forhold til resten af sitets funktionalitet. Den eneste grund til at det ligger der, er fordi jeg ikke kan finde ud af at skalere "imageholder" på samme måde som "box"(det andet movieclip). Så hvis løsningen ville være at flytte "imageholder" ud af "box", så er det helt ok. I så fald har jeg nok brug for hjælp til at skalere "imageholder" på samme måde som "box", men det er måske en helt anden sag og et andet spørgsmål. Pågrund af mine mangelfulde flash evner har jeg svært ved at bedømme sværhedsgraden...
Avatar billede hmanback Nybegynder
28. november 2009 - 19:01 #4
Hej igen

Slet koden jeg bad dig tilføje i kommentar #2

Den skal tilføjes ved hjælp af en movie clip event handler.

På root timeline dobbelt klik på mc "box".

Klik én gang på mc "imageholder" på scenen.

I Actions vinduet tilføj:
onClipEvent(load) {
    this.forceSmoothing = true;
}

Bemærk: Navnet på Actions vinduet hedder "ACTIONS - MOVIE CLIP".
Hvilket betyder at koden "ligger på" movie clippet, modsat et frame script.
Avatar billede zebratan Nybegynder
29. november 2009 - 17:13 #5
Hold kæft, det virker!!! Rigtig mange gange tak, hmanback. Du aner ikke hvor meget hjælp det har været. Jeg er dybt taknemmelig og  tak igen for et letforståeligt og præcist svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester