AS3 / AIR / Mobile - 将位图保存到文件

5

我已经认真地搜索了各个地方,但是找不到解决方案。 我的应用程序可以轻松地将UTF字节保存为XML文件,并且可以在iOS和Android的允许缓存位置中进行保存。

但是我无法弄清楚如何将位图/位图数据保存到同一缓存文件夹中的文件中。 创建文件很容易....

_fs.open(_f, FileMode.WRITE);

//What goes in here to save the Bitmap?

_fs.close();

任何关于这个的帮助都将不胜感激。
谢谢。
更新:代码如下...
        _smallLogo = Bitmap(_loader.content);
        //this.addChild(_smallLogo);

        var jpg:JPGEncoder = new JPGEncoder(100);
        var bd:BitmapData = new BitmapData(_smallLogo.width, _smallLogo.height);
        bd.draw(_smallLogo);
        var ba:ByteArray  = jpg.encode(bd);

        //3
        _fs.open(_f, FileMode.WRITE);
        _fs.writeBytes( ba, 0, ba.length );         
        _fs.close();

更新 - 已回答

//SAVE
_smallLogo = Bitmap(_loader.content);           
var jpg:JPGEncoder = new JPGEncoder(100);
var ba:ByteArray  = jpg.encode(_smallLogo.bitmapData);

_fs.open(_f, FileMode.WRITE);
_fs.writeBytes( ba, 0, ba.length );         
_fs.close();

//OPEN
private function getLogo():void {
    var ba:ByteArray = new ByteArray();

    _fs.open(_f, FileMode.READ);
    _fs.readBytes(ba);          
    _fs.close();

    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData);
    loader.loadBytes(ba);
}

private function getBitmapData(e:Event):void {
    var decodedBitmapData:BitmapData = Bitmap(e.target.content).bitmapData;
    var newBMP:Bitmap = new Bitmap();
    newBMP.bitmapData = decodedBitmapData;

    this.addChild(newBMP);
}

http://cookbooks.adobe.com/post_Save_a_local_image_file__JPEG_or_PNG__from_an_imag-8406.html - Neil
或者访问http://blog.stroep.nl/2008/09/saving-images-with-air-create-a-wallpaper-using-as3-only/。你在哪里找的? - zduny
谢谢你们的帮助,但它仍然不起作用。 运行3次后,它保存了3个具有不同文件大小的文件,但没有显示图像... 当取消注释addchild时,它可以工作,所以我知道Bitmap有数据。我的代码现在在原始问题中。 - atomicDroid
1个回答

1

如果您正在写入设备缓存并更加关注速度而不是文件大小,您可以考虑使用:

bd.encode(bd.rect, new PNGEncoderOptions(true), ba);

请注意,如果没有启用fastCompression = true,则PNG编码器比JPEG编码器慢。
有关AS3 PNG编码性能的更多信息此处
如果您需要快速处理(包括编码和解码),可以使用原始格式将位图数据写入,如果您已经知道大小,则不需要头文件,或者使用基本标题(如bmp),以便嵌入图像大小并允许更轻松地查看缓存。
顺便说一下,我不确定为什么您需要首先重新编码位图:似乎位图已经来自加载器,因此_loader.contentLoaderInfo.bytes应该已经获取到刚加载的文件的ByteArray,并且将避免对已经压缩的文件进行有损压缩。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接