选择要上载的图像后,如何在Flash datagrid中显示图像?
浏览图像并选择它们之后。如何在datagrid中显示图像预览?我能够显示文件名、文件大小,但无法显示图像。下面是我写的代码,请注意,这不是一个完整的代码,但足以让人理解。谢谢选择要上载的图像后,如何在Flash datagrid中显示图像?,flash,actionscript-3,image,datagrid,upload,Flash,Actionscript 3,Image,Datagrid,Upload,浏览图像并选择它们之后。如何在datagrid中显示图像预览?我能够显示文件名、文件大小,但无法显示图像。下面是我写的代码,请注意,这不是一个完整的代码,但足以让人理解。谢谢 // variables used var list:Array = new Array(); var listDP:Array = new Array(); var fileRefList:FileReferenceList; //dgMain is my DataGrid instance dgMain.addCol
// 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();
//使用的变量
变量列表:数组=新数组();
var listDP:Array=new Array();
var fileRefList:FileReferenceList;
//dgMain是我的DataGrid实例
dgMain.addColumn(“名称”);
dgMain.addColumn(“尺寸”);
list=fileRefList.fileList;//用户选择的文件列表
for(变量i:Number=0;i
问得好。只需在听到事件时加载每个图像。在FileReferenceList
上选择事件。然后为datagrid创建一个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>
如果这解决了问题,请将其标记为正确:)
最好的,
兰斯问得好。只需在听到事件时加载每个图像。在FileReferenceList
上选择事件。然后为datagrid创建一个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>
如果这解决了问题,请将其标记为正确:)
最好的,
兰斯你好,兰斯,谢谢你的回复。由于我对Flash非常陌生,并且没有Flex软件,上述代码是否适用于Flex?我也能为Flash做同样的事情吗?如果是这样的话,我该如何在我的Flash数据网格中使用与itemRenderer等价的东西呢。目前,我已经有了一个DataGrid组件。谢谢嘿,我从来没有使用过Flash,所以我不确定Flash中datagrid的细节。但是completeHandler和load方法中FileReferenceList的代码应该可以。如果你试过,请告诉我。嗨,兰斯,我设法获得了Flex并尝试了你的代码。但是,我在var标记行中遇到了一个错误:Object={name:fileRef.name,size:Math.round(fileRef.size/1000)+“kb”,preview:fileRef.data};我的错误是“通过静态类型为flash.net:FileReference的引用访问可能未定义的属性数据”。我目前使用的是Flash版本10.0.2.54。我通过更新Flex SDK解决了这个问题。谢谢我没有足够的声誉,所以我无法将你的答案标记为正确,我对stackoverflow很陌生。很高兴听到!你需要多少声誉才能将答案标记为正确?嗨,兰斯,谢谢你的回复。由于我对Flash非常陌生,并且没有Flex软件,上述代码是否适用于Flex?我也能为Flash做同样的事情吗?如果是这样的话,我该如何在我的Flash数据网格中使用与itemRenderer等价的东西呢。目前,我已经有了一个DataGrid组件。谢谢嘿,我从来没有使用过Flash,所以我不确定Flash中datagrid的细节。但是completeHandler和load方法中FileReferenceList的代码应该可以。如果你试过,请告诉我。嗨,兰斯,我设法获得了Flex并尝试了你的代码。但是,我在var标记行中遇到了一个错误:Object={name:fileRef.name,size:Math.round(fileRef.size/1000)+“kb”,preview:fileRef.data};我的错误是“通过静态类型为flash.net:FileReference的引用访问可能未定义的属性数据”。我目前使用的是Flash版本10.0.2.54。我通过更新Flex SDK解决了这个问题。谢谢我没有足够的声誉,所以我无法将你的答案标记为正确,我对stackoverflow很陌生。很高兴听到!你需要多少声誉才能将答案标记为正确?