2012-05-23 38 views
1


我正在通过WCF get调用获取存储在SQL中的PNG图像。该图像被编码为base64字符串并传递给我的AS3代码。我需要从数据中提取图像并将其显示在场景中。
除其他事项外,我也尝试过这个...Actionscript 3:将bytearray转换为PNG并在场景中显示

var imgArray:ByteArray = Base64.decodeToByteArray(responseXML.ImageObject); 
var myRect:Rectangle = new Rectangle(100,100,200,200); 
var bmd:BitmapData = new BitmapData(200,200,true,0xAAAAAAAA); 
bmd.setPixels(myRect, imgArray); 
var image:Bitmap = new Bitmap(bmd,"auto",true); 
this.addChild(image); 

,但无济于事。
帮助!

+0

我没有收到错误。我只是没有得到我的舞台上的形象。我解决了这个问题。解决方案如下。 – KSK

回答

6

你为什么不使用加载器和loadbytes?它是本地的。

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoad) 
loader.loadbytes(byteArray); 

private function handleLoad(e:Event):void { 
    var loader:Loader = e.currentTarget as Loader; 
    // removelistener,etc 

    trace(loader.content as Bitmap); 
} 

你的代码的问题在于PNG是压缩的,位图是未压缩的。

+0

感谢DanielH,这工作。 – KSK

+0

您应该将其标记为“答案”。并删除你的“答案”。 – ansiart

+0

感谢您的代码片段,它解决了我的问题。 –

1

尝试PNGDecoder (http://www.ionsden.com/content/pngdecoder)

import ion.utils.png.PNGDecoder; 

var bmd:BitmapData = PNGDecoder.decodeImage(imgArray); 
+0

我知道AS3-Flash默认支持PNG,JPEG和GIF格式。所以没有必要使用PNG解码器。 感谢您的输入。我也会评估PNGDecoder的使用。 – KSK

2

我使用了DanielH的输入法,并在我的舞台上加载了图像。这是我在事件处理函数中所做的...

function ImageLoaded(e:Event):void 
    { 
     var bmd:BitmapData = new BitmapData(imageLoader.ImageLoader.width,imageLoader.ImageLoader.height,true, 0xFFFFFF); 
     bmd.draw(imageLoader.ImageLoader); 
     var image:Bitmap = new Bitmap(bmd,"auto",true); 
     image.width=40; 
     image.height=40; 
     if(!CheckAndStoreImageIDKey(imageLoader.ImageID)) 
     { 
      Images[imageLoader.ImageID] = image; 
     } 
    } 
相关问题