2

ユーザーが巨大な画像をフラッシュ アプリケーションにインポートできるようにしようとしています。

残念ながら、BitmapData オブジェクトのサイズは「幅または高さが 8,191 ピクセル、ピクセルの合計数が 16,777,215 ピクセルを超えることはできません」(参考文献を参照)

明らかに、FlashPlayer11 ではこれらの制限はなくなります。ただし、FileReference からバイトしか取得しないため、画像データにアクセスするには、Loader.loadBytes() を介してこれらを変換する必要があります。これは、古い BitmapData の制限を超える画像では機能しないようです。

この問題の原因/回避策を知っている人はいますか?

function onAddButtonClicked(e:MouseEvent = null):void {
    trace("Opening file");
    _frl = new FileReferenceList();
    _frl.addEventListener(Event.SELECT, onFilesSelected);
    _frl.browse([new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png")]);
}
//When user has selected the files
 function onFilesSelected(e:Event):void {
    for each (var item:FileReference in _frl.fileList) {
        item.load();
        item.addEventListener(Event.COMPLETE, onFileLoaded);
    }

}

//When files are loaded into the application
 function onFileLoaded(e:Event):void {
    trace("File Loaded!");
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBytesLoaded);
    loader.loadBytes(e.target.data);
}

//When files are finally available as Loader/Image
 function onBytesLoaded(e:Event):void {
    addChild((e.target as LoaderInfo).loader);
}
4

1 に答える 1

1

私たちのアプリでは、Flash Player 11.1 r102 で問題なく動作しています。onBytesLoaded ハンドラーを除いて、私はあなたと同じことをすべて行います。これを試して、ビットマップが実際にロードされているかどうかを確認してください。12,000 x 12,000 ピクセルの JPEG (合計 144,000,000 ピクセル) でテストしたところ、完全に読み込まれました (読み込みが非常に遅いことを除けば)。

function onBytesLoaded(e:Event):void {
    var ldr:Loader = Loader(e.target.loader);

    var bmp:Bitmap = Bitmap(ldr.content);
    trace("Bitmap Loaded: " + bmp.width + "x" + bmp.height);

    var img:Image = new Image();
    img.source = bmp;
    addChild(img);
}
于 2011-11-29T09:21:08.353 に答える