我正在使用PersistenceManager来存储我的应用程序中的数据。如果我存储BitmapData,它将正确存储,但重启后BitmapData现在是一个Object。如果我将Object转换为BitmapData,它就不起作用。
pm.setProperty("sign", signArea.getBitmapData());
这就是我尝试加载它的方式。
pm.getProperty("sign") as BitmapData;
如果我没有停止应用程序,它会正确加载,但重启后“符号”不再是BitmapData。它现在是一个对象。
答案 0 :(得分:1)
我认为您不能安全地将BitmapData实例存储在共享对象中(在PersistanceManager中内部使用)。文档中未明确提及:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html
然而,您可以将BitmapData的数据保存为ByteArray,并在检索时转换回来。
// write
var byteArray:ByteArray = bitmap.bitmapData.getPixels(bitmap.bitmapData.rect);
so.data.byteArray = byteArray;
so.data.width = bitmap.bitmapData.rect.width;
so.data.height = bitmap.bitmapData.rect.height;
so.flush();
// read
var byteArray:ByteArray = so.data.byteArray;
var bitmapData:BitmapData = new BitmapData(so.data.width, so.data.height);
bitmapData.setPixels(bitmapData.rect, byteArray);
请注意,您还需要存储图像的宽度和高度。您可以将它包装在一个对象中,以便在持久性管理器中有1个条目而不是3.如果要存储多个位图,这可能会更方便。
// write
var bd:BitmapData = signArea.getBitmapData();
var r:Rectangle = bd.rect;
pm.setProperty("sign", {bytes:bd.getPixels(r), width:r.width, height:r.height});
// read
var signData:Object = pm.getProperty("sign");
var bitmapData:BitmapData = new BitmapData(signData.width, signData.height);
bitmapData.setPixels(bitmapData.rect, signData.bytes);