Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [as3] BitmapData da URL

    Avrei bisogno di lavorare con la classe BitmapData da una foto caricata esterna da un URL,
    non riesco a trovare la giusta documentazione in giro, mi sembra che BitmapData lavori solo su istanze.
    Qualcuno ha consigli suggerimenti, sapete tra l'altro se è fattibile?
    Grazie in anticipo!
    ---smile is your life---:-)---

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182

    Re: [as3] BitmapData da URL

    Originariamente inviato da mr.smile
    Avrei bisogno di lavorare con la classe BitmapData da una foto caricata esterna da un URL,
    non riesco a trovare la giusta documentazione in giro, mi sembra che BitmapData lavori solo su istanze.
    Qualcuno ha consigli suggerimenti, sapete tra l'altro se è fattibile?
    Grazie in anticipo!
    Puoi farlo tranquillamente, considera che quando utilizzi il Loader per caricare un file esterno, poi a caricamento terminato, hai a disposizione l'oggetto nativo a cui risale il contenuto caricato. Nel caso di un'immagine l'oggetto caricato sarà di tipo Bitmap. L'unica limitazione è che puoi utilizzarlo solo all'interno della funzione che fa capo all'evento COMPLETE per il Loader.

  3. #3
    Bene!
    Grazie della bella risposta!

    Ho provato a lavorarci su, e a caricare delle immagini da flickr

    esperimento

    l'immagine riesco a caricarla in un contenitore UIloader,
    ma tentando una scrittura di un bitmatData flickrs mi restituisce un immagine di unaivalable...
    è un problema di sicurezza immagino...? Ma come cavarci fuori?
    ---smile is your life---:-)---

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se flickr non ha abilitato i domini esterni a caricare le sue immagini da flash, credo che non ci si possa fare nulla, considerato che per gestire la cosa dovrebbe esserci sul dominio di flickr un file crossdomain.xml che permette agli altri domini di accedere e gestire i contenuti caricati dal suo dominio.
    Comunque non so se potrebbe dipendere anche dal fatto che usi UILoader al posto della classe Loader.


    [edit] nulla, non è un problema di UILOader, ma di sicurezza, come dicevo all'inizio
    infatti ottengo questo errore dal debugger:
    Codice PHP:
    SecurityErrorError #2122: Violazione della sicurezza sandbox: Loader.content: [url]http://www.liberotutti.it/develop/cwt/cwt_as3.swf[/url] non può accedere a [url]http://l.yimg.com/g/images/photo_unavailable.gif.[/url] È richiesto un file di criteri, ma il flag checkPolicyFile non è stato impostato durante il caricamento di questo contenuto multimediale.
        
    at flash.display::Loader/get content()
        
    at cwt_as3_fla::MainTimeline/completeHandler() 
    il file di criteri di cui parla l'errore è appunto il file crossdomain.xml

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Dovrei anche vedere il codice per comprendere meglio il perchè dell'errore, comunque l'alternativa, se ti carica almeno la foto sarebbe di crearsi una copia bitmap del loader e usarla per gli altri scopi del tuo codice.

  6. #6
    Allora mi sfugge la differenza tra caricare nel UIloader oppure ricevere il bitmapData.
    Perchè quando io sto premendo il pulsante vado sia a chiamare
    Codice PHP:
    picUiComp.source picURL ".jpg"
    che la creazione dell'oggetto Bitmap
    Codice PHP:
     var image:Bitmap Bitmap(loader.content); ... 
    in uno si vede nell'alltro no... dove sta la differenza?
    Ti ringrazio
    ---smile is your life---:-)---

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Nel primo caso stai richiamando una stringa, nel secondo invece tenti proprio di richiamare l'oggetto caricato dall'esterno, che nel caso dell'immagine su dominio esterno, crea un errore.
    Ma come ti dicevo, non posso comprendo con esattezza il motivo se non vedo il codice utilizzato.

  8. #8
    codice:
    function showFirstPhoto(event:Event):void
    {
    	//debug
        var myXML:XML = new XML(myXMLLoader.data);
        trace(myXML.toXMLString());
        txtDebug.text = myXML.toXMLString();
    	
        //if it’s not ok, there were no photos returned, check txtDebug for the error.
        if (myXML.@stat == "ok")
        {
            var photo:XML = myXML.photos.photo[0];
            //need to build URL like
            //http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg
            var picURL:String = "http://farm";
            picURL += photo.@farm;
            picURL += ".static.flickr.com/";
            picURL += photo.@server;
            picURL += "/" + photo.@id;
            picURL += "_" + photo.@secret + "_m";
            picLarge.source = picURL + ".jpg";
            trace(picURL);
            trace(photo.@title);
    		
    		
    		
    		var loader:Loader = new Loader();
    		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
    		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    
    		var request:URLRequest = new URLRequest(picURL);
    		loader.x = size * numChildren;
    		loader.load(request);
    		addChild(loader);
        }
    
    
        function completeHandler(event:Event):void {
                var loader:Loader = Loader(event.target.loader);
                var image:Bitmap = Bitmap(loader.content);
            }
            
        function ioErrorHandler(event:IOErrorEvent):void {
                trace("Unable to load image");
            }
    }
    quindi l'Ui component è come se richiamasse solo un riferimento... mentre la BitmapData, richiede l'oggetto vero e propio...
    ---smile is your life---:-)---

  9. #9
    Originariamente inviato da and80
    crearsi una copia bitmap del loader e usarla per gli altri scopi del tuo codice.
    Intendi il loader che carica l'immagine nell'UIcomponent?
    ---smile is your life---:-)---

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ok, è più semplice di quello che pensavo, evidentemente flickr ha il file crossdomain.xml ma in ogni caso bisogna dire al nostro filmato di controllare questa situazione.
    C'era anche un errorino nel codice, per questo non ti caricava l'immagine, avevi dimenticato l'estensione quando provavi a caricare nel loader.
    Per far funzionare il filmato basta aggiungere le parti in rosso.
    codice:
    function showFirstPhoto(event:Event):void
    {
    	//debug
        var myXML:XML = new XML(myXMLLoader.data);
        trace(myXML.toXMLString());
        txtDebug.text = myXML.toXMLString();
    	
        //if it’s not ok, there were no photos returned, check txtDebug for the error.
        if (myXML.@stat == "ok")
        {
            var photo:XML = myXML.photos.photo[0];
            //need to build URL like
            //http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg
            var picURL:String = "http://farm";
            picURL += photo.@farm;
            picURL += ".static.flickr.com/";
            picURL += photo.@server;
            picURL += "/" + photo.@id;
            picURL += "_" + photo.@secret + "_m";
            picLarge.source = picURL + ".jpg";
            trace(picURL);
            trace(photo.@title);
    		
    		var context:LoaderContext = new LoaderContext();
    		context.checkPolicyFile = true;
    
    		var loader:Loader = new Loader();
    		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
    		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    
    		var request:URLRequest = new URLRequest(picURL+".jpg");
    		loader.x = size * numChildren;
    		loader.load(request, context);
    		addChild(loader);
        }
    
    
        function completeHandler(event:Event):void {
                var loader:Loader = Loader(event.target.loader);
                var image:Bitmap = Bitmap(loader.content);
            }
            
        function ioErrorHandler(event:IOErrorEvent):void {
                trace("Unable to load image");
            }
    }
    Una cosa che non ho capito però è perchè usi sia il componente che il loader per caricare la stessa immagine. In ogni caso il tuo codice verrà applicato solo al Loader nella funzione completeHandler.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.