Actionscript 3 AS3-字节数组到位图

Actionscript 3 AS3-字节数组到位图,actionscript-3,bytearray,Actionscript 3,Bytearray,我把一个图像编码成字节数组。如何将其从ByteArray转换为位图? 谢谢Uli您的字节数组的格式是什么?如果像素为32位ARGB格式,则可以创建一个新的BitmapData对象,并使用BitmapData.setPixels()设置像素。然后将位图数据分配给位图对象 如果它们不是32位ARGB格式,您可能需要首先转换它们。使用Loader import flash.display.Loader; import flash.display.LoaderInfo; import flash.eve

我把一个图像编码成字节数组。如何将其从ByteArray转换为位图?
谢谢Uli

您的
字节数组的格式是什么?如果像素为32位ARGB格式,则可以创建一个新的
BitmapData
对象,并使用
BitmapData.setPixels()
设置像素。然后将位图数据分配给位图对象

如果它们不是32位ARGB格式,您可能需要首先转换它们。

使用Loader

import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.display.BitmapData;
 
private function startLoad():void
{
  var loader:Loader = new Loader();
  loader.loadBytes(byteArray);
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
}     

private function loaderComplete(event:Event):void
{
    var loaderInfo:LoaderInfo = LoaderInfo(event.target);
    var bitmapData:BitmapData = new BitmapData(loaderInfo.width, loaderInfo.height, false, 0xFFFFFF);
    bitmapData.draw(loaderInfo.loader);
    // result: bitmapData
}

我在下面做了这个测试,效果很好。它将字节数组转换为位图。图像的格式是不相关的。png、jpg和gif的格式都保存在bitmapdata类将为您解释的元数据中。保存时应使用JPEG编码器或PNGEncoder

        import mx.events.FlexEvent;

        public var _file:File;
        public var _stream:FileStream;
        public var _load:Loader;

        protected function init(event:FlexEvent):void {
            _file = File.desktopDirectory;
            _file.addEventListener( Event.SELECT, selectComplete);
            _file.browseForOpen( 'Image' );
        }
        private function selectComplete( event:Event ):void {
            _stream = new FileStream();
            _stream.addEventListener( Event.COMPLETE, loadComplete );
            _stream.openAsync( _file, FileMode.READ );
        }
        private function loadComplete( event:Event ):void {
            var ba:ByteArray = new ByteArray();
            _stream.readBytes( ba );
            _load = new Loader();
            _load.contentLoaderInfo.addEventListener( Event.COMPLETE, loadbytesComplete );
            _load.loadBytes( ba );
        }
        private function loadbytesComplete( event:Event ):void {
            var bit:Bitmap = _load.content as Bitmap;
            img.source = bit;
        }
本课程可以帮助您:

[Bindable]
私有静态var m_barrLogo:ByteArray;
.
.
.
私有函数init_m_barrLogo():void
{
m_barrLogo=someValue;
//下图将自动读取ByteArray和的新值
//显示相应的图像。
}
.
.
.

很有趣。如何找出ByteArray的格式?(ByteArray是一个图像,还包含元数据信息)也可以编辑您的问题以包括您的更高级别目标是什么,听起来您可能正在做一些比加载这些图像所需的更复杂的事情。图像文件格式为JPEG。我更高层次的目标是获取ByteArray并将其以不同大小以JPEG格式保存到硬盘。我尝试了您的代码,但使用它保存的所有图像均无效。我在draw下面添加了这段代码以将图像保存到驱动器:
this.fileReference=newfilereference();保存(bitmapData,“test.jpg”);你知道为什么这些图像无效吗
[Bindable]
private static var m_barrLogo:ByteArray;
.
.
.
private function init_m_barrLogo():void
{
    m_barrLogo = someValue;

    // The Image below will automatically read the new value of the ByteArray and
    // display the appropriate image.
}
.
.
.
<mx:Image source="{m_barrLogo}" y="10" x="10" scaleContent="true" height="140"
        width="145"/>