0

サーバーから Bitmap リソースをプルするアプリケーションがあります。現在、これを行うために Loader クラスを使用しています。ロードしたら、ローダーのサイズに基づいて BitmapData を生成し、Loader のインスタンスを直接描画します ( BitmapData は Bitmap インスタンスだけでなく Away3D テクスチャにも使用されるため、一度取得した Loader は必要ありません)。

これは常に私にとってはうまくいきましたが、最近、0x0 ローダーを取得し始め、結果として無効な BitmapData が発生しました。

私はこれをやめました:

this.imageBitmap = new BitmapData(this.imageLoader.width, this.imageLoader.height, true, 0);

..そしてこれを始めました:

this.imageBitmap = new BitmapData(event.target.content.width, event.target.content.height, true, 0);

event は、ローダーによって起動された Event.COMPLETE イベントです。これで寸法の問題は修正されましたが、BitmapData は単なる白いビットマップです (デフォルトで透明に設定されているため、これが描画されています)。イライラすることに、これは毎回発生するわけではありません。アプリケーションを更新すると、約 25% の確率で正常に動作しますが、それ以外の場合はこのように再生されます。

締め切りが迫っていて、これについては本当にうんざりしています。誰かが助けてくれたり、より良い方法を提案してくれたりすれば、本当に助かります!

4

2 に答える 2

0

ローダーのイメージデコードポリシーを調整する必要があるように思えます-COMPLETEが起動する前にイメージをデコードするようにします-その後、幅と高さなどは信頼できるはずです。

これを行うには、適切な LoaderContext オブジェクトを Loader.load メソッドに追加するだけです。

var loaderContext:LoaderContext = new LoaderContext();
//set decode policy
loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD;
//load image
loader.load(yourUrl, loaderContext);

デフォルトのデコード ポリシーは ImageDecodingPolicy.ON_DEMAND で、実際に必要になるまで画像をデコードしません。

言語ドキュメント: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ImageDecodingPolicy.html

于 2013-03-06T01:04:10.570 に答える
0

それを修正しました、愚かな見落としと少しあいまいな状況ですが、誰かが同様のことに遭遇した場合に備えて答えを残します.

私のローダーは資産クラスに含まれています - 別のオブジェクトが内部ビットマップを必要とするとき、それはこのクラスを照会します - ビットマップが存在する場合はそれを返し、そうでない場合はそれをローダーでロードし、発生した COMPLETE イベントのコールバックを登録しますLoader がその内容をロードして BitmapData インスタンスに転送したとき。

私が犯したばかげた間違いは、複数のオブジェクトが同じ (まだアンロードされていない) アセットを照会している場合、そのたびにアセットのリロードを開始し、新しいローダーを作成するというものでした...そのため、最初のローダーが完成し、イベントが発生しますが、それへの参照が存在しません。メモリ リークが発生するだけでなく、Asset クラスが最後に作成されたローダーから BitmapData を抽出する原因となり、これは完全ではありませんでした! Loader の非同期性が、時折、BitmapData の抽出に間に合うように最終的な Loader の準備が整うなど、時々機能する理由です。

簡単な解決策は、最初に load() が呼び出されたときに true に設定される内部ブール値 _isLoading を作成することでした。true の場合、後続の呼び出しはすべて無視されますが、コールバックはまだ登録されており、うまく機能します。

于 2013-03-14T10:25:48.883 に答える