2009-05-25 15 views
6

Come assegnare il valore bytearray all'immagine di sfondo del pannello. Se qualcuno ha idea o esperienza, aiutami a superare il problema. BREVE SCADENZA:Come convertire bytearray in immagine o immagine in bytearray?

Ho il controllo del pannello e voglio caricare l'immagine dal webservice come immagine di sfondo. Quindi ho usato setstyle() ma non accettando quell'immagine. quindi come aggiungere quell'immagine alla mia immagine di sfondo del pannello. Plz tel me le tue idee qui.

+0

Ulteriori informazioni sarebbero utili. –

risposta

4

uhm, ben presumo, dal momento che si tratta di un'immagine, lo avete in un BitmapData, diciamo "myBmp" ... quindi utilizzare il seguente per estrarre tutti i dati da BitmapData:

var bytes:ByteArray = myBmp.getPixels(myBmp.rect); 

e il testo seguente scrivere:

myBmp.setPixels(myBmp.rect, bytes); 

nota che soltanto i dati grezzi pixel a 32 bit è memorizzato nel ByteArray, senza compressione, né le dimensioni dell'immagine originale.

per la compressione, si deve fare riferimento al corelib, come ozke detto ...

1

Utilizzando classe di Adobe JPGEncoder (com.adobe.images.JPGEncoder) e ByteArray è praticamente tutto ciò che serve. Conversione immagine da array di byte (CAPS assumendo sono variabili avresti bisogno di compilare):

// -- first draw (copy) the image's bitmap data 
var image:DisplayObject = YOUR_IMAGE; 
var src:BitmapData = new BitmapData(image.width, image.height); 
src.draw(image); 

// -- encode the jpg 
var quality:int = 75; 
var jpg:JPGEncoder = new JPGEncoder(quality); 
var byteArray:ByteArray = jpg.encode(src); 
1

ho usato una flash.display.Loader() per caricare un'immagine in un array. Ha un evento Completo che viene attivato dopo che l'immagine è stata caricata. Quindi disegno l'immagine su una bitmap che ho impostato sui dati di un'immagine che potrebbero essere collocati in un pannello. Spero che tu possa fare da questa fortuna.

public static function updateImage(img:Image, matrix:Matrix, 
            pageDTO:PageDTO, bitmapData:BitmapData):void { 
    var loader:flash.display.Loader = new flash.display.Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event) : void { 
     bitmapData.draw(loader.content, matrix); 
     pageViewer.data = new Bitmap(bitmapData); 
    }); 
    loader.loadBytes(pageDTO.thumbnail); 
} 

<mx:Panel> 
    <mx:Image id="pageViewer"/> 
</mx:Panel> 
0

Ho avuto lo stesso problema. Come soluzione alternativa, ho creato la sub Canvas nidificata all'interno di una tela principale e ho aggiunto un'immagine alla tela principale dietro la tela secondaria. Tutto ciò che viene disegnato sulla sotto tela apparirà in cima all'immagine.

0

Basta caricarlo in un'istanza Loader utilizzando la funzione loadBytes.

var ldr:Loader = new Loader(); 
ldr.loadBytes(myByteArray); 
addChild(ldr); 
12

In Flex 3 o superiore, non vi resta che fare:

yourImage.source = yourByteArray; 

saluti!

+0

+1 Ehi. Sembra davvero pulito. Perché mi è stato detto che, per usare un 'byteArray' come sorgente per un'immagine, dovevo scrivere qualcosa come' img.load (myByteArray) '? Ha senso? –

+0

le domande riguardano lo stile dell'immagine di sfondo, questo non funziona con setStyle ('backgroundImage', ...) –