2

医生说:

从 AIR 3 和 Flash player 11 开始,BitmapData 对象的大小限制已被删除。位图的最大尺寸现在取决于操作系统。

但是,为什么我不能有 120,000 x 120,000 像素的 BitmapData 对象?我在使用 64 位内核的 OS X Lion 上。

现在 120,000 ^ 2 将给我 14,400,000,000 个我需要占用的像素,它只需要 34 位来存储该 int。但显然我可以有 64 位整数,不是吗?我错过了什么吗?“依赖于操作系统”是什么意思?如何?

4

3 回答 3

8

从什么时候开始,BitmapData 像素相当于一个位?请记住,您正在处理颜色信息,因此每个像素至少占用一个uint(=> 大小:32 位,或 4 字节)。

那么,这意味着您的内存消耗实际上是

120000^2 * 4 => 57,600,000,000 Bytes => ap. 53,6 GB

另请注意,whileNumber是 64 位数据类型,intuint不是。

您可能需要考虑使用不同的方法来组织数据。
如果您正在处理一张大图片,则必须将其分成合理大小的部分。限制可能已被取消,但我建议您将自己限制在最大范围内。舞台大小的 4 倍(足够小,可以进行合理平滑的滚动,也足够大,因此您不必一直在舞台上放置对象)。

如果它不是您要存储的实际像素信息,也许 ByteArray 可能是一个可能的替代方案。

于 2012-04-12T09:19:37.243 回答
1

Actually, there're several software and hardware limitations for amount of addressable size. Except 32/64 bit architecture, there're several others:

  • memory controller total limit
  • amount of RAM slots x MAX RAM module size
  • some memory management layer implementations like PAE (depends on CPU + OS) may even increase amount of total addressable virtual memory, but max.amount of physical memory remains the same.
  • marketing/software OS limitations (see section 2.5 for windows versions in the same wiki article);

The only info I've found on web states, Mac OS X Lion (not Server) has software limit of 64GB. The try of allocating more memory in one piece, than machine physically has hardly would be succeeded, though.

于 2012-04-12T09:25:56.713 回答
0

你想保存什么样的东西?生成的东西?我认为您需要创建一个使用固定随机种子的系统,并以低分辨率构建视图/创建内容。您应该能够重复相同的动作。您可能也必须保存(自定义)动作才能以某种方式达到这一点。如果你有,你应该应用一个比例变量并为每个图块渲染图块,以绕过一个大画布。这种系统需要时间来构建,如果应该绘制的东西缩放得太高,仍然可能会出现一些问题。
如前所述,对于那种打印,您不需要那么高分辨率。当然,除此之外,获得这些巨大的尺寸无论如何都是一个挑战。

于 2012-04-16T12:50:17.407 回答