FileSteam.open()を使用して、ディスクから画像ファイルを同期的に読み取りたい。次に、readBytes()を使用してそれらをByteArrayに取り込むことができますが、それをBitmapDataに取り込む方法が見つかりません。Imageはそれをそのまま読み取ることができますが、BitmapDataが必要です。
助言がありますか?
FileSteam.open()を使用して、ディスクから画像ファイルを同期的に読み取りたい。次に、readBytes()を使用してそれらをByteArrayに取り込むことができますが、それをBitmapDataに取り込む方法が見つかりません。Imageはそれをそのまま読み取ることができますが、BitmapDataが必要です。
助言がありますか?
パッケージで...をflash.display
使用すると、が得られ、から簡単にアクセスできます...これにより、操作全体が非同期になります。もちろん...実行できるのは、デコーダーを自分で作成することだけです。 ..。。Loader::loadBytes
Bitmap
BitmapData
Bitmap::bitmapData
現在、AS3、as3corelibにPNGエンコーダーがあり、他にもあると思いますが、フラッシュはそれ自体でこれを行うため、おそらくほとんどの人はデコーダーを作成するのは無意味だと考えています。また、デコードはデコードよりも簡単です。つまり、フォーマット全体を実装する必要があります...それでも、もちろんショットを与えることができます...
まあ、それが役立つことを願っています...
グリーツ
back2dos
githubのこのライブラリには、同期的に動作するPNGDecoderがあります。試してみる:
https://github.com/terrynoya/ASImageLib
使用法ウィキから:
var bytes:ByteArray = [PNG bytes];
var bmpData:BitmapData = new PNGDecoder().decode(bytes);
this.addChild(new Bitmap(bmpData));
ただし、組み込みクラスを使用する方が高速であると思います。ユースケースによって異なりますが、通常、画像などのUIを処理する場合は、UIスレッドのブロック(アプリのスタッター)を回避するために非同期を使用することをお勧めします。ただし、いくつかのユースケースが存在する可能性があります。
FileStreamは純粋なデータを管理するために機能し、BitmapDataはデータをコンパイルまたは逆コンパイルするために機能するため、それは理にかなっています。
Imが使用しようとしている方法は、オリジンのファイルを読み取り、アプリケーションディレクトリに一時ファイルを書き込むことです。これは、ローダークラスが問題なく到達できる可能性があります。
幸運を祈ります!