【问题标题】:AS3 - ByteArray to bitmapAS3 - 字节数组到位图
【发布时间】:2014-01-31 02:36:37
【问题描述】:

我将图像编码为 ByteArray。如何将其从该 ByteArray 转换为位图? 谢谢。乌力

【问题讨论】:

    标签: actionscript-3 bytearray


    【解决方案1】:

    我在下面做了这个测试,效果很好。它将字节数组转换为位图。图像的格式无关紧要。 png、jpg、gif 都将它们的格式保存在 bitmapdata 类将为您解释的元数据中。保存时应使用 JPEGEncoder 或 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;
            }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 有趣。如何找出我的 ByteArray 的格式? (ByteArray 是一个图像,还包含元数据信息)
      • 同时编辑您的问题以包含您的更高级别目标,听起来您可能正在做一些比加载这些图像所需要做的更复杂的事情。
      • 图片文件格式为JPEG。我更高级别的目标是获取 ByteArray 并将其以不同大小保存到硬盘驱动器为 JPEG。
      【解决方案3】:

      使用加载器

      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
      }
      

      【讨论】:

      • 我试过你的代码,我用它保存的所有图像都是无效的。我在 draw 下方添加了此代码以将图像保存到驱动器:this.fileReference = new FileReference(); this.fileReference.save(bitmapData,"test.jpg" ); Any ideas why the images invalid?
      【解决方案4】:
      【解决方案5】:
      [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"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-27
        • 2012-07-28
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        • 1970-01-01
        相关资源
        最近更新 更多