1

给定:具有以下事件的 Flex TileList:

<mx:nativeDragDrop>
  <![CDATA[
    if(event.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) {
      var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

      for each(var file:File in files)
      {
        // file.data is null here!
      }

      this.listData.refresh();
    }
  ]]>
</mx:nativeDragDrop>

我正在尝试从我拖入此 TileList 的 jpeg 创建一个缩略图列表。Image.source 可以使用 url 来显示图像,但我需要先缩小图像(嗨 rez 照片)我已经完成了缩放部分,除了我需要文件中的 BitmapData 并且 file.data 为 null。

另外,我试过这个:

var x:URLRequest = new URLRequest(value.file.url); // this is a local file (e.g. file:///C:/somefile.jpg)
var b:Bitmap = new Bitmap(x.data as BitmapData);

数据也为空!太令人沮丧了。任何帮助,将不胜感激。

4

1 回答 1

0

我假设这是 AIR 应用程序的一部分。(无法从普通的 Flex 应用程序访问剪贴板。)

我没有使用 AIR 的经验,但是您的第二个代码块显然是错误的。实例URLRequest本身什么也不做,它只是一个存储请求详细信息的静态对象。为了从该 URL 获取数据,您需要创建一个Loader,并将请求传递给该加载器,如下所示:

var req:URLRequest = new URLRequest(value.file.url); // this is a local file (e.g. file:///C:/somefile.jpg)
var ldr:Loader = new Loader();
ldr.addEventListener(Event.COMPLETE, function(event:Event):void {
   var b:Bitmap = event.target.content as Bitmap;
});
ldr.load(req);

当然,您必须填写Event.COMPLETE处理程序。请注意,Loader该类可用于加载 SWF 和图像对象,对于所有其他内容,您必须自己使用URLLoader和解析数据。

关于该块,这是文档nativeDragDrop中的一个片段:

通常,nativeDragEnter 或 nativeDragOver 事件的处理程序会评估正在拖动的数据以及允许的拖动操作,以确定交互式对象是否可以接受放置。要指定交互式对象是合格的目标,事件处理程序必须调用 NativeDragManager.acceptDrop() 函数,并传入对该对象的引用。如果用户在指定对象上释放鼠标按钮,则该对象成为放置目标并调度 nativeDragDrop 事件。

你打电话NativeDragManager.acceptDrop()正常吗?

于 2009-02-12T19:53:14.697 回答