2009-05-25 93 views
6

如何为面板背景图像分配bytearray值。如果有人有想法或体验,请帮我解决问题。简介EXP:如何将bytearray转换为图像或图像bytearray?

我有面板控制,并希望加载从web服务获取图像作为backgroundimage。所以我使用setstyle(),但它不接受该图像。所以如何将这个图像添加到我的面板背景图像。Plz在这里给我你的想法。

+0

更多的信息会对您有所帮助。 – 2009-05-25 13:46:11

回答

4

嗯,好我想,因为它是一个形象,你有它在一个BitmapData,让我们说“myBmp” ...... 然后使用以下方法来提取所有数据的BitmapData:

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

和以下写:

myBmp.setPixels(myBmp.rect, bytes); 

注意,只有原始32比特的像素数据被存储在所述的ByteArray,无压缩,也不是原始图像的尺寸。

压缩,您应该参考corelib的,因为ozke说...

1

使用Adobe的JPGEncoder(com.adobe.images.JPGEncoder)类和ByteArray是几乎所有你需要的。转换图像的字节数组(假设CAPS是你需要填写变量):

// -- 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

我用了一个使用flash.display.Loader()将数组中加载图像。它有一个完整的事件,在图像加载后触发。然后,我将该图像绘制到一个位图上,该位图设置为可放置在面板中的图像的数据。希望你能从这个好运中做出。

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

我有同样的问题。作为解决方法,我创建了嵌套在主Canvas中的子Canvas,并将子图像添加到子Canvas后面的主Canvas中。子画布上绘制的任何内容都将出现在图像的顶部。

0

只需使用loadBytes函数将其加载到Loader实例中即可。

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

在Flex 3或更高,你只需要做:

yourImage.source = yourByteArray; 

的问候!