2

我正在创建一个 openlaszlo 应用程序,其中将存在一个 html 标记,并且我有一些可在 swf 中拖动的组件。我想将这些组件拖到 html 上。这是不可能的。

所以我想的是对html内容进行截图,并在我需要拖动时将其替换为实际的html内容。

从理论上讲,这应该是可能的,并且在 flex 中是可能的,我验证了自己。我正在尝试在 Openlaszlo 中做同样的事情。但我没有得到任何线索

到目前为止,我已经尝试过这样并且我收到一个错误,即 html 标签不是 IBitmapDrawable 的对象

<canvas width="800" height="600" bgcolor="white" debug="true">
<script when="immediate"><![CDATA[
class MagUtils {
#passthrough (toplevel: true) {
import flash.display.DisplayObject;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filters.*;
import flash.events.MouseEvent;
import mx.graphics.ImageSnapshot;
import flash.utils.ByteArray;
import flash.display.IBitmapDrawable;
}#

var temp:lz.view;
var colorTransform:ColorTransform;
var rect:Rectangle;


public function snap (m:IBitmapDrawable, t:lz.view):void {

temp = t;
var temp_mc = temp.sprite; // getMCRef();
var mainView_mc = main.sprite; // getMCRef();
var scale = 1;
var x;
var y;
var w;
var h;
  var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(m);
  var imageByteArray:ByteArray = imageSnap.data;
colorTransform = new flash.geom.ColorTransform();
rect = new flash.geom.Rectangle(0, 0, temp.width, temp.height);

var bitmap:BitmapData = new flash.display.BitmapData(w, h, false);
 bitmap.setPixels(rect, imageByteArray);
var bm:Bitmap = new Bitmap(bitmap);
temp.sprite.addChild (bm);
bitmap = null;
}
}
lz.MagUtils = new MagUtils();
]]>

</script>


<button name="magnifier" text="magnifyingtool" >
<handler name="onclick">
lz.MagUtils.snap(canvas.main.ht,canvas.temp);
</handler>
</button>

<view name="main" x="5" y="15" width="200" height="200" bgcolor="yellow">
    <html name="ht" width="200" height="200" src="http:hello.html"/>
</view>
<view id="temp" name="temp" x="5" y="300" visible="true" width="200" height="200" bgcolor="gray">
</view>


</canvas> 

HTML内容是

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
   <HEAD>
      <TITLE>
         A Small Hello
      </TITLE>
   </HEAD>
<BODY>
   <H1>Hi</H1>
   <P>Test Page</P>
</BODY>
</HTML>
4

1 回答 1

1

无法在 Flash 中截取不受 Flash 显示列表管理的元素,其中包括放置在浏览器中 SWF 影片下方的 iFrame 内容。这似乎就是你想要做的。

如果要将可视对象从 iFrame 拖到 SWF 影片区域,一种方法可能是将 HTML 中的内容呈现到 HTML5 画布元素中,提取位图数据并将其推送到 SWF 影片中以在 OpenLaszlo 中显示看法。但这意味着您要拖动的所有视觉元素都需要绘制到 HTML5 画布中。

这是一个使用 Flash Player 的过滤器功能将过滤器应用于 HTML5 画布元素中的图像的示例: http ://www.quasimondo.com/archives/000695.php

以下是此示例的相关文件的链接:

  1. 嵌入不可见 SWF以处理图像的HTML 页面。
  2. JavaScript 文件,其中包含用于将数据发送到 SWF 影片剪辑的函数。
  3. ActionScript 类处理从 JavaScript 发送的图像数据,并将处理后的数据传递回 HTML 页面。

但我不确定您在 iFrame 中拥有的所有内容都可以呈现到画布元素中。

于 2012-10-19T16:38:13.483 回答