首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bytearray to image

bytearray to image
EN

Stack Overflow用户
提问于 2012-08-30 18:43:43
回答 1查看 1.1K关注 0票数 0

我想为包含图像和标签的列表实现一个itemRenderer。列表的数据提供者是我从后端获得的对象列表:

代码语言:javascript
复制
public class Object {
private String label;

private byte[] content;

}

我的项目渲染器:

代码语言:javascript
复制
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                      xmlns:s="library://ns.adobe.com/flex/spark" 
                      xmlns:mx="library://ns.adobe.com/flex/mx">
<s:layout>
    <s:HorizontalLayout/>
</s:layout>
<mx:Image source="{data.content}"/>
<s:Label text="{data.label}"/>

我只得到了一张残缺的图像。有没有人知道我为什么要解决这个问题以及如何解决这个问题。先谢谢你,雅代

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-30 22:38:05

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Image.html#source

  • 位图或BitmapData实例。
  • 表示DisplayObject的子类的类。

BitmapFill实例化该类并创建该类的位图渲染。DisplayObject的实例。BitmapFill将其复制到位图中进行填充。

  • 外部图像文件的名称。

spark.components.Image不能使用ByteArray实例作为源。因此您需要将其转换为Bitmap实例。

如下所示:

代码语言:javascript
复制
<?xml version="1.0"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Script><![CDATA[
        private var _bytesLoader:Loader;

        override public function set data(value:Object):void
        {
            super.data = value;

            _loadBytes(data.bytes as ByteArray);
        }

        private function _loadBytes(bytes:ByteArray):void
        {
            _destroyBytesLoader();

            if (!bytes)
            {
                return;
            }

            _createBytesLoader();
            try
            {
                _bytesLoader.loadBytes(bytes);
            }
            catch (e:*)
            {
                _destroyBytesLoader();
            }
        }

        private function _createBytesLoader():void
        {
            _bytesLoader = new Loader();
            _bytesLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, _bytesLoader_completeHandler);
            _bytesLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _bytesLoader_errorHandler);
            _bytesLoader.contentLoaderInfo.addEventListener(AsyncErrorEvent.ASYNC_ERROR, _bytesLoader_errorHandler);
        }

        private function _destroyBytesLoader():void
        {
            if (!_bytesLoader)
            {
                return;
            }

            _bytesLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, _bytesLoader_completeHandler);
            _bytesLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, _bytesLoader_errorHandler);
            _bytesLoader.contentLoaderInfo.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, _bytesLoader_errorHandler);

            try
            {
                _bytesLoader.unload();
            }
            catch (e:*){}

            _bytesLoader = null;
        }

        private function _bytesLoader_completeHandler(event:Event):void
        {
            try
            {
                myImage.source = Bitmap(_bytesLoader.content).bitmapData.clone();
            }
            catch (e:*)
            {
            }
            _destroyBytesLoader();
        }

        private function _bytesLoader_errorHandler(event:Event):void
        {
            _destroyBytesLoader();
        }

        ]]></fx:Script>

    <s:layout>
        <s:HorizontalLayout />
    </s:layout>

    <s:Image id="myImage"/>
    <s:Label text="{data.label}" />

</s:MXDataGridItemRenderer>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12195081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档