ホーム >> 左脳Script >> Adobe AIR >> HTMLLoader を使った Web ページのサムネイル表示

HTMLLoader を使った Web ページのサムネイル表示


AIR では、 HTMLLoader といわれるクラスがあり、これはWebブラウザの機能を持っています。URL を与えてやれば、そのページをそのまま表示出来るのです。

サムネイル化

ただページをサムネイル化するだけならば、HTMLLoader の大きさを scaleX、scaleY で調整すればよいのですが、この方法ではブラウズ操作が可能になってしまいます。あくまでサムネイルを作りたかったので、BitmapData.draw でイメージを作る方法にしました。

そこで、以下のようなコードを書きましたが・・・

public class urlThumb extends Image
{
    private var thumb:BitmapData;
    //
    public function urlThumb(url:String) 
    {
        width = 128;
        height = 128;
        //
        thumb = new BitmapData(width, height);
        data = new Bitmap(thumb);
        //
        var html:HTMLLoader = new HTMLLoader();
        html.addEventListener(Event.COMPLETE, thumbSet);
        html.width = 1024;
        html.height = 1024;
        html.load(new URLRequest(url));
    }
    public function thumbSet(e:Event):void 
    {
        var html:HTMLLoader = e.currentTarget as HTMLLoader;
        var r:Number = width / html.contentWidth;
        var m:Matrix = new Matrix();
        m.scale(r, r);
        thumb.draw(html, m, null, null, null, true);    //  サムネイルセット
    }
}
AIR限定のコードです。Image からの派生ですが、Sprite 派生にすれば、「Flex」ではなく「Action Script 3.0」でも動かせます。

一部のページでは、真っ白になってサムネイル化が出来ません。
ページの読み込みが完了していない訳でもなかった(Event.COMPLETEは発生している)のですが、真っ白のサムネイルになるのです。それも、一部のサイト、などという頻度ではなく、かなりのページで起こるのです。

原因が掴めず、ややヤケクソ気味に、Event.COMPLETEEvent.HTML_RENDER (レンダリング更新イベント)にすると、ページの画像が反映されるようになりました。ちょっとした副作用として、「ページのロード過程」や「アニメGIF等の常に画面に変化をもたらすもの」があると「その変化が逐一反映される」それなりに、インタラクティブなサムネイルが出来ました。


結局

しかし、実際のところよく原因が判っていません。COMPLETE イベント時に「ページのレンダリングが全く成されていない可能性がカナリの頻度で発生する」という事実を知る事は出来ましたが。

実際サムネイルとして使う場合は、やはり時間で切って静止画像を作成する必要がありますね。しかし、「HTML_RENDER イベントが発生しなくなってから」という条件にすると、ページ内にアニメGIFがあるだけで永久にHTML_RENDER イベントが発生し続けるので、これになんらかの対応をする必要があります。



トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/238

コメントする

ホーム >> 左脳Script >> Adobe AIR >> HTMLLoader を使った Web ページのサムネイル表示

アーカイブ

このブログ記事について

このページは、n-yagiが2009年11月24日 22:43に書いたブログ記事です。

ひとつ前のブログ記事は「Flex カスタムコンポーネントを AS3 で作るには」です。

次のブログ記事は「理不尽な VerifyError とシーケンス ~ifとbreakとcontinue~」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。