我想使用FileSteam.open()从磁盘同步读取图像文件。然后我可以使用readBytes()将它们放入ByteArray中,但我无法找到如何将其转换为BitmapData。我知道Image可以按原样读取,但我需要BitmapData。
有什么建议吗?
答案 0 :(得分:5)
flash.display
中,使用Loader::loadBytes
...即可为您提供Bitmap
,然后可以通过{{1}简单地访问BitmapData
} ...这使得整个操作异步,当然......你唯一能做的就是自己写一个解码器...
现在AS3中有一个PNG 编码器,在as3corelib中,我猜甚至还有其他人,但可能大多数人认为编写解码器毫无意义,因为flash本身就是这样做的,并且编码比解码更容易,因为解码意味着,你必须实现整个格式......当然,你可以给它一个镜头...
好吧,希望有所帮助...格尔茨
back2dos
答案 1 :(得分:0)
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线程(导致应用程序口吃)。但可能会有一些用例。
答案 2 :(得分:-1)
有道理,因为FileStream用于管理纯数据,而BitmapData用于编译或反编译数据。
我即将使用的方法是读取源文件并在应用程序目录中写一个临时文件,Loader类可以毫无问题地访问该文件。
祝你好运!