【问题标题】:AS3 / AIR / Mobile - Save bitmap to fileAS3 / AIR / Mobile - 将位图保存到文件
【发布时间】:2012-05-25 04:08:27
【问题描述】:

我认真地到处寻找,但找不到解决方案。 我的应用程序很容易将 UTF 字节保存为 XML 文件在 iOS 和 Android 允许的缓存位置。

但我不知道如何将 Bitmap / BitmapData 保存到同一缓存文件夹中的文件中。 创建文件很好....

_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);
}

【问题讨论】:

  • blog.stroep.nl/2008/09/…你在看哪里?
  • 感谢您的帮助,但仍然无法正常工作。运行 3 次,它保存 3 个文件大小不同的文件,但不显示图像...... addchild 在未注释时工作,所以我知道 Bitmap 有数据。我的代码现在在原来的问题上

标签: image actionscript-3 bitmap bitmapdata


【解决方案1】:

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

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

请注意,如果没有 fastCompression = true,png 编码器比 jpeg 编码器慢

更多关于 as3 png 编码性能的信息here

如果您首先需要速度(对于编码和解码),您可以以原始格式编写位图数据,如果您已经知道大小,则没有标头,或者如果您想嵌入图像大小,则使用 bmp 等基本标头允许更轻松地查看您的缓存

顺便说一句,我不知道你为什么首先需要重新编码位图: 似乎位图已经来自加载器,所以_loader.contentLoaderInfo.bytes 应该已经为您提供刚刚加载的文件的 ByteArray,它应该已经编码,并且将避免对可能已经压缩的文件进行有损压缩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多