ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   超ビギナー
     Image の complete イベント
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
skylark
投稿日時: 2009-1-16 12:24
やや お馴染みさん
登録日: 2008-9-25
居住地:
投稿: 6
Image の complete イベント
http://userflex.wordpress.com/2008/07/28/image-caching/
のような画像のキャッシュを行いたく試作をしています。
Image.source にローカルで保持している png や swf 中の特定の イメージを指定するとき、画像のロード完了時に
Event.COMPLETE イベントが発生すると考えていたのですがどうも通知されないような気がしています...。

環境 : FlexBuilder3.0.0[Win]
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" >
  <mx:Script>
    <![CDATA[
      import flash.events.Event;
      public function onImageComplete(event:Event):void
      {
        trace("きた");
      }
    ]]>
  </mx:Script>

  <mx:Image id="idImage" source="@Embed(source='./images/sample.png')" complete="onImageComplete(event);" /> 
</mx:Canvas>


Image.content が利用できるようになった時点で情報を取りたいのですが
どのようにすればわかりますでしょうか?
Luien
投稿日時: 2009-1-17 0:04
やや お馴染みさん
登録日: 2008-8-8
居住地: 神奈川
投稿: 9
Re: Image の complete イベント
こんにちは。


<mx:Image id="idImage" source="@Embed(source='./images/sample.png')" complete="onImageComplete(event);" />


Embed すると画像をコンパイルされた SWF に組み込みます。
ということは complete する必要もなくアクセス可能であると考えられます。

source に画像の url を指定した場合は
実際にその url に読み込みにいきますので、
読み込みが無事に完了した場合には complete イベントが
発生すると思います。
skylark
投稿日時: 2009-1-17 10:51
やや お馴染みさん
登録日: 2008-9-25
居住地:
投稿: 6
Re: Image の complete イベント
> Luien さま
お世話になります。

速度改善のために画像キャッシュをしようとしており
http://onegame.bona.jp/tips/loaddotpic.html の情報より
BitmapData として保持するのが自分の目的にあっていそうです。

      private static var loader:Loader = null;
      private static var imageCache:BitmapData = null;

      private function loadComplete(event:Event):void {
        var bmp:Bitmap = (event.target as LoaderInfo).content as Bitmap;
        imageCache = new BitmapData(bmp.width, bmp.height);
        imageCache = bmp.bitmapData;
      }

      public function XXXX():void {
        if (!loader) {         
          loader = new Loader();
          loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
          loader.load(new URLRequest("./images/sample.png"));
        }
      }


Image には最終的にキャッシュしたデータから部分的に
取り出した Bitmap を割り当てようと思っています。
ご指摘内容の確認は未実施ですが、コメントありがとうございました (_ _)
skylark
投稿日時: 2009-1-17 14:28
やや お馴染みさん
登録日: 2008-9-25
居住地:
投稿: 6
Re: Image の complete イベント
追記です。
Embed 指定しなければ Image でも complete を取ることが出来ました!
が画像リソースを埋め込まないという選択はできない気がしたので、
  [Embed(source="./images/sample.png")]
  private var ImagesClass:Class;
  private static var imageCache:BitmapData = null;

  public function XXXX():void {
    if (!imageCache) {         
      var bmp:Bitmap = new ImagesClass();
      imageCache = new BitmapData(bmp.width, bmp.height);
      imageCache = bmp.bitmapData;
    }
  }

... としようかと思っています。
Luien
投稿日時: 2009-1-17 19:44
やや お馴染みさん
登録日: 2008-8-8
居住地: 神奈川
投稿: 9
Re: Image の complete イベント
この場合やりたいことというのは、
上記の ImagesClass をインスタンス化するときの
オーバーヘッドを減らしたいということでしょうか。

ImagesClass のインスタンスを source にすると、
このインスタンスと image.content は同じ参照に
なるわけですから、上記の方法で良いかと思います。

ちなみに蛇足かもしれないですが、


var bmp:Bitmap = new ImagesClass();
//imageCache = new BitmapData(bmp.width, bmp.height);
imageCache = bmp.bitmapData;


で良いと思います。
Luien
投稿日時: 2009-1-17 19:59
やや お馴染みさん
登録日: 2008-8-8
居住地: 神奈川
投稿: 9
Re: Image の complete イベント
上記サイトでは外部サイトから取ってきた
画像の BitmapData をコピーしていますね。
であれば、


var bmp:Bitmap = new ImagesClass();
var bitmapData:BitmapData = new BitmapData(bmp.width, bmp.height);
bitmapData.draw(bmp);
imageCache = bitmapData;


でしょうか。

コピーしている理由は良く分からないですが・・・。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を