3

Flash ビルダーで actionscript 3.0 を使用してアプリを構築しています。これは、この質問のフォローアップの質問です。

bytearray をサーバーにアップロードする必要がありますが、ビットマップデータを に変換するために使用する関数が非常にByteArray遅いため、モバイル デバイスがフリーズします。私のコードは次のとおりです。

var jpgenc:JPEGEncoder = new JPEGEncoder(50);
trace('encode');
//encode the bitmapdata object and keep the encoded ByteArray

    var imgByteArray:ByteArray = jpgenc.encode(bitmap);
temp2 = File.applicationStorageDirectory.resolvePath("snapshot.jpg");
    var fs:FileStream = new FileStream();
    trace('fs');
    try{     
     //open file in write mode     
     fs.open(temp2,FileMode.WRITE);
          //write bytes from the byte array

     fs.writeBytes(imgByteArray);
          //close the file

     fs.close();
         }catch(e:Error){

それをに変換する別の方法はありbyteArrayますか?より良い方法はありますか?

4

5 に答える 5

1

血まみれのライブラリを使用してみてください:http ://www.blooddy.by 。しかし、私はモバイルデバイスでそれをテストしませんでした。成功するかどうかコメントしてください。

于 2013-02-22T08:26:53.683 に答える
0

Ilyaからの答えは、私にとって何ができたのかということでした. ライブラリをダウンロードしましたが、その中に使用方法の例があります。私は flashbuilder で CameraUI を取得して写真を撮り、エンコード/圧縮してから、Web サービスを介してサーバーに送信する作業を行っています (データは圧縮されたバイト配列として送信されました)。これは私がしました:

by.blooddy.crypto.image.JPEGEncoder.encode( bmp, 30 );

bmp はビットマップ データです。エンコードにかかる時間は 3 秒未満で、私の制御フローに同期的に簡単に適合させることができました。非同期メソッドを試してみましたが、最終的には非常に時間がかかり、アップロード中にユーザーがセル サービスから Wi-Fi に移動したり、タワーからタワーに移動したときなどを追跡するのが困難でした。

詳細が必要な場合は、ここにコメントしてください。

于 2013-04-23T20:01:46.780 に答える
0

非同期でエンコードできる JPEG エンコーダーを探す必要があります。そうすれば、画像が圧縮されている間もアプリを使用できます。私はどのライブラリも試していませんが、これは有望に見えます:

http://segfaultlabs.com/devlogs/alchemy-asynchronous-jpeg-encoding-2

Alchemyを使用しているため、 as3corelib の JPEGEncoder よりも高速になります (現在使用しているものだと思います)。

于 2013-02-21T19:31:55.530 に答える
0

ネイティブ JPEG エンコーダーが理想的です。非同期が適していますが、それでも遅い可能性があります (ブロックしないだけです)。別のオプション:

var pixels:ByteArray = bitmapData.getPixels(bitmapData.rect);
pixels.compress();

ネイティブのパフォーマンスについてはわかりません。パフォーマンスは、使用しているイメージの種類によって異なります。

于 2013-02-21T23:41:20.133 に答える