2012-05-17 23 views
5

Tôi đã nghiêm túc nhìn khắp mọi nơi nhưng không thể tìm thấy một giải pháp. Ứng dụng của tôi dễ dàng lưu các byte UTF dưới dạng tệp XML trong các vị trí bộ nhớ cache được phép cho cả iOS và Android.AS3/AIR/Điện thoại di động - Lưu bitmap vào tập tin

Nhưng tôi không thể tìm ra cách lưu Bitmap/BitmapData vào một tệp trong cùng một thư mục bộ nhớ cache. Tạo tệp tin là tốt ....

_fs.open(_f, FileMode.WRITE); 

//What goes in here to save the Bitmap? 

_fs.close(); 

Bất kỳ trợ giúp nào về điều này sẽ được đánh giá cao.

Cảm ơn

UPDATE: Mã như sau ...

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

CẬP NHẬT - TRẢ LỜI

//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); 
} 
+0

http://cookbooks.adobe.com/post_Save_a_local_image_file__JPEG_or_PNG__from_an_imag-8406.html – Neil

+0

Hoặc http://blog.stroep.nl/2008/09/saving-images-with-air-create-a-wallpaper-using- as3-only/Bạn đang tìm kiếm ở đâu? – mrpyo

+0

Cảm ơn sự giúp đỡ của cả hai nhưng nó vẫn không hoạt động. Chạy 3 lần để lưu 3 tệp với kích thước tệp khác nhau nhưng không hiển thị hình ảnh ... công cụ bổ trợ hoạt động khi không được chú ý, vì vậy tôi biết Bitmap có dữ liệu. Mã của tôi bây giờ là câu hỏi gốc – atomicDroid

Trả lời

1

Nếu bạn đang viết vào bộ nhớ cache và thiết bị có liên quan nhiều hơn với tốc độ hơn kích thước tập tin, bạn có thể xem xét sử dụng:

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

xin lưu ý rằng nếu không có fastCompression = true, png encoder là chậm hơn so với jpeg encoder

thông tin thêm về hiệu suất mã hóa as3 png here

Nếu cần tốc độ cao hơn (cả mã hóa và giải mã), bạn có thể viết bitmapdatas ở định dạng thô, không có tiêu đề nếu bạn đã biết kích thước hoặc tiêu đề cơ bản như bmp nếu bạn muốn nhúng kích thước hình ảnh và cho phép xem bộ nhớ cache của bạn dễ dàng hơn 012 Bằng cách này, tôi không chắc chắn lý do tại sao bạn sẽ cần phải mã hóa lại bitmap ở nơi đầu tiên: có vẻ như bitmap đã đến từ một Loader vì vậy _loader.contentLoaderInfo.bytes nên đã giúp bạn có được ByteArray của tập tin bạn chỉ cần được tải, nó phải được mã hóa và sẽ tránh làm mất dữ liệu trên một tệp có thể đã được nén.

Các vấn đề liên quan