1

Google の画像検索結果を表示するフラッシュ プログラムを作成しようとしています。結果はすべて、私が所有していない別のドメインにあるため、通常の crossdomain.xml 手順でこれを行う方法はありません。

これは、私がやろうとしていることは不可能だということですか? Web サイトではなく、スタンドアロン アプリケーションとして実行すると機能します。

グーグルを試してみて、それを回避する方法についていくつかの方法を見つけましたが、どれも機能しません。見続けるべきですか?

4

2 に答える 2

1

crossdomain.xml ファイルがなくても、別のドメインから画像を読み込むことができます。ビットマップデータにアクセスしようとしたり、とにかくビットマップを変更しようとすると、エラーが発生します。

次のコードは Web 上で正常に動作します。

public class Main extends Sprite 
{

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);


        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
        loader.load(new URLRequest("https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTg2aSe9QhKeZrwNNM3Uyfstmsh24DWgH-Uhr-Xn-0lltyqhgvLRw"));
        addChild(loader);
    }

    private function onComplete(e:Event):void 
    {
        try {
            var bmp:Bitmap = e.target.content;  
        }
        catch (err:Error)
        {
            trace(err.message);
        }

    }

}
}
于 2012-09-22T17:57:55.380 に答える
0

Baris が言及しているように、データを表示するだけであれば、画像をホストするサーバーに crossdomain.xml は必要ありません。ピクセル データ (コピー/変更/その他) にアクセスする必要がある場合は、次のいずれかを試すことができます。

  1. サーバー側スクリプトを使用して、最初にイメージをローカル サーバーにキャッシュし、次にフラッシュにロードします。
  2. URLLoader を使用してイメージをバイナリ データとしてロードし、そのバイトをローダー クラスに渡します。Keita の記事をご覧ください。

参照用の投稿のスニペットを次に示します。

var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(Event.COMPLETE, urlLoaderComplete);

var url:String = "http://www.adobe.com/images/shared/product_mnemonics/50x50/flash_player_50x50.gif";
urlLoader.load(new URLRequest(url));

function urlLoaderComplete(e:Event):void
{
  var loader:Loader = new Loader();
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
  loader.loadBytes(urlLoader.data as ByteArray);
}


function loaderComplete(e:Event):void
{
  var bmp:Bitmap = e.currentTarget.content as Bitmap;
  addChild(bmp);
  var bitmapData:BitmapData = bmp.bitmapData
  bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point(0, 0),
    new ColorMatrixFilter([
      0, 0, 0, 0, 0,
      1, 1, 0, 0, 0,
      0, 0, 1, 0, 0,
      0, -1, -1, 1, 0
  ]));
}
于 2012-09-23T23:38:26.887 に答える