0

我正在使用 PersistenceManager 来存储我的应用程序中的数据。如果我存储 BitmapData,它将正确存储,但重新启动后 BitmapData 现在是一个对象。如果我将对象转换为 BitmapData 它不起作用。

pm.setProperty("sign", signArea.getBitmapData());

这就是我尝试加载它的方式。

pm.getProperty("sign") as BitmapData;

如果我不停止应用程序,它会正确加载,但重新启动后,“标志”不再是 BitmapData。它现在是一个对象。

4

1 回答 1

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);
于 2013-09-11T13:12:33.837 回答