BitmapData.draw()とクロスドメイン

画像をロードする処理で、同じ画像を何度も読み込むのはムダなのでビットマップをコピーして使うことにしたら、BitmapData.draw()で止まってしまった。いろいろ調べてみたら・・・

・別ドメインの画像を読み込むだけなら、ポリシーファイルがなくても問題なし。
・別ドメインの画像を読み込んでデータの操作をする場合は、ポリシーファイルが必要。

ということらしい。
BitmapData.draw()のヘルプには、次のように書いてる。

読み込んだビットマップイメージを source として使用する場合も制限があります。読み込んだイメージが呼び出し元と同じドメインからのものの場合、draw() メソッドの呼び出しは成功します。また、イメージのサーバーのクロスドメインポリシーファイルで、draw() メソッドを呼び出す SWF コンテンツのドメインに許可を付与できます。この場合、LoaderContext オブジェクトの checkPolicyFile プロパティを設定し、このオブジェクトを context パラメータとして、イメージの読み込みに使用する Loader オブジェクトの load() メソッドを呼び出すときに使用する必要があります。これらの制限は、アプリケーションセキュリティサンドボックス内の AIR コンテンツには適用されません。

う〜ん、知らなかった。毎回のload()で設定するのは面倒なので、Security.loadPolicyFile()でポリシーファイルを指定することで解決。
下記のサイトにお世話になりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*