Можно ли сделать снимок экрана содержимого HTML-тега с помощью OpenLaszlo?

Я создаю приложение openlaszlo, в котором будет присутствовать тег html, и у меня есть некоторые компоненты, которые можно перетаскивать в swf. Я хочу перетащить эти компоненты по HTML. Это невозможно.

Итак, я думаю о том, чтобы сделать снимок экрана с содержимым html и заменить его фактическим содержимым html, когда мне нужно перетащить его.

Теоретически это должно быть возможно, и это возможно, в гибкости, которую я проверил самостоятельно. Я пытаюсь сделать то же самое в 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>

person karthick    schedule 19.10.2012    source источник
comment
Приложите к своему вопросу содержание hello.html. Не зная, что такое объект 'ht', невозможно сказать, что вы пытаетесь сделать.   -  person raju-bitter    schedule 19.10.2012


Ответы (1)


Невозможно сделать снимок экрана во Flash элементов, которые не управляются списком отображения Flash, который включает содержимое iFrame, размещенное под SWF-фильмом в браузере. И похоже, это то, что вы пытаетесь сделать.

Если вы хотите перетащить визуальный объект из iFrame в область фильма SWF, одним из подходов может быть визуализация содержимого в HTML в элементе холста HTML5, извлечение данных растрового изображения и вставка их в фильм SWF для отображения в OpenLaszlo. Посмотреть. Но это будет означать, что все визуальные элементы, которые вы хотите перетащить, нужно нарисовать на холсте HTML5.

Вот пример использования функции фильтра Flash Player для применения фильтра к изображению в элементе холста HTML5: http://www.quasimondo.com/archives/000695.php

Вот ссылки на соответствующие файлы для этого примера:

  1. HTML-страница с невидимым SWF-файлом для обработки изображения.
  2. файл JavaScript с функциями для отправки данные во фрагмент ролика SWF.
  3. Класс ActionScript обработка данных изображения, отправленных из JavaScript, и передача обработанных данных обратно на страницу HTML.

Но я не уверен, что весь контент, который у вас есть в iFrame, можно отобразить в элементе холста.

person raju-bitter    schedule 19.10.2012
comment
Я добавил образец HTML. Я думаю об использовании класса Flex ImageSnapshot. Я видел, что делается снимок экрана всей страницы. У меня есть Adobe, который действует как браузер и загружает мое приложение openlaszlo. Можно ли вызвать функцию, присутствующую в AIR, из openlaszlo? - person karthick; 20.10.2012
comment
Вы знаете, что не можете создать снимок тега iFrame или OpenLaszlo ‹html›? Класс Flex ImageSnaphot вам в этом не поможет. - person raju-bitter; 20.10.2012
comment
Flex ImageSnapShot не работал с laszlo. Но все мое приложение Laszlo встроено в веб-браузер AIR. И из этого веб-браузера AIR я смог успешно сделать снимок экрана, включая HTML-тег. Что я действительно хочу знать, так это то, что можно вызвать встроенную функцию air из openlaszlo? - person karthick; 21.10.2012
comment
Но вы не можете использовать процесс сборки по умолчанию. Создайте код ActionScript 3 для своего приложения, как описано здесь: stackoverflow.com/questions/13008487 Затем вы можете использовать сгенерированный исходный код ActionScript. с Adobe Air SDK для создания вашего приложения Air. - person raju-bitter; 22.10.2012