Как отобразить изображение в сетке данных Flash после выбора изображения для загрузки? - PullRequest
1 голос
/ 27 февраля 2010

После просмотра изображений и их выбора. Как я могу отобразить предварительный просмотр изображения в сетке данных? Я могу отобразить имя файла, размер файла, но не смог отобразить изображение. Ниже приведены коды, которые я написал, обратите внимание, что это не полный код, но достаточно, чтобы сделать его понятным. Спасибо.

// variables used
var list:Array = new Array();
var listDP:Array = new Array();
var fileRefList:FileReferenceList;

//dgMain is my DataGrid instance
dgMain.addColumn("name");
dgMain.addColumn("size");

list = fileRefList.fileList; // List of files that user has selected

for(var i:Number = 0; i < list .length; i++) 
{
   list_dp.push({name:list[i].name, size:Math.round(list[i].size / 1000) + " kb"});
}

dgMain.dataProvider = new DataProvider(list_dp);
dgMain.spaceColumnsEqually();

1 Ответ

1 голос
/ 27 февраля 2010

Хороший вопрос.Просто загрузите каждое из изображений, когда вы услышите событие Event.SELECT на FileReferenceList.Затем создайте itemRenderer для сетки данных, которая может отображать возвращенный массив ByteArray.Вот пример:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="creationCompleteHandler()">


    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            // variables used
            var list:Array;
            var files:ArrayCollection = new ArrayCollection();
            var fileReferenceList:FileReferenceList = new FileReferenceList();

            protected function creationCompleteHandler():void
            {
                fileReferenceList.addEventListener(Event.SELECT, selectHandler);
            }

            protected function selectHandler(event:Event):void
            {
                load();
            }

            protected function completeHandler(event:Event):void
            {
                var fileReference:FileReference = event.target as FileReference;
                var token:Object = {name:fileReference.name, size:Math.round(fileReference.size / 1000) + " kb", preview:fileReference.data};
                files.addItem(token);
            }

            public function load():void
            {
                list = fileReferenceList.fileList; // List of files that user has selected
                var i:int = 0;
                var n:int = list.length
                for(i; i < n; i++) 
                {
                    list[i].addEventListener(Event.COMPLETE, completeHandler);
                    list[i].load();
                }
            }

        ]]>
    </mx:Script>

    <mx:Button label="browse" click="fileReferenceList.browse()"/>

    <mx:DataGrid id="dgMain"
        dataProvider="{files}"
        horizontalScrollPolicy="on"
        allowMultipleSelection="true" rowHeight="25">
        <mx:columns>
            <mx:DataGridColumn dataField="preview" headerText="preview">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:Canvas verticalCenter="0" horizontalScrollPolicy="off" verticalScrollPolicy="off">
                            <mx:Image source="{data.preview}" width="20" height="20"/>
                        </mx:Canvas>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn dataField="name" headerText="Name" />
            <mx:DataGridColumn dataField="size" headerText="Size" />
        </mx:columns>
    </mx:DataGrid>
</mx:Application>

Если это решило проблему, пометьте ее как правильную:).

Best, Lance

...