我正在为自己制作一个程序,它可以打开未排列的精灵表,根据 XML 文件排列它们,然后将它们保存为 PNG。它的作用是加载未排列的工作表并将其放入 a 中BitmapData
,然后根据特定的 XML 文件抓取工作表上的每一帧(使用BitmapData.copypixels()
),并将结果Bitmap
按顺序添加到数组中。然后它通过将这些Bitmap
s 添加到Sprite
对象来排列它们,相应地创建新行。本质上,我最终得到的是一个按我想要的方式排列的Sprite
容器。Bitmaps
现在我通常从这里做的是将它绘制Sprite
到一个BitmapData
using上BitmapData.draw()
,它可以工作,然后我继续将它编码为 PNG 并保存它。这一切都有效,除了一种情况。有时我会从多个无组织的 spritesheet 中制作一个排列好的 spritesheet,这会导致一张相当大的表格。在一种情况下,生成的表格非常大,出于某种原因BitmapData
,我想绘制的表格不会接受那么大。也就是说,我创建了一个新的BitmapData
,其尺寸等于Sprite
,但是当我尝试这样做时,我得到了这个错误:
ArgumentError: Error #2015: Invalid BitmapData.
据我所知,只有当我制作BitmapData
宽度和/或高度为 0 的 a 或超出最大尺寸时才会发生这种情况。如果不是因为 Flash 11 和 AIR 3 没有限制,我认为是后者。
无论如何,我还没有找到解决方法,所以基本上这是我的问题:有没有办法以不同的方式做到这一点?例如,我可以在Sprite
不制作 a的情况下获取 a 的像素数据BitmapData
吗?或者,我可以以某种方式将数据存储在 aBitmapData
中,而不必为其提供与图像相同的尺寸吗?还是有一些不同的方法可以完全做到这一点?
我意识到我可以将图像分成 2 个单独BitmapData
的 s,但我想知道在诉诸此方法之前是否有其他选择。
顺便说一句,如果重要的话,它是一个使用 FlashDevelop 和 Flex 4 SDK 制作的 Adobe AIR 应用程序。我正在使用PNGEncoder2对我保存的最终精灵表进行编码。
编辑:我发现问题似乎是我的电脑根本无法处理BitmapData
所需大小的 a。我尝试将其拆分为两个单独BitmapData
的 s,但不幸的是,在创建第二个时BitmapData
我收到了相同的错误。因此,我的 PC 内存中似乎无法同时包含大量数据BitmapData
。不幸的是,这意味着我什至不能使用 g10 的解决方案,即BitmapDatas
使用他链接到的 PNG 编码器将两个合并为一个 PNG。到目前为止,我的解决方案是将图像的一半存储到 aBitmapData
中,对其进行编码,然后dispose()
将BitmapData
另一半存储在其中并对其进行编码。然后我保存ByteArrays
(这是编码的结果)作为单独的图像,我可以使用外部程序将其重建为一个。
所以现在,我的问题更多是“我可以以某种方式将其保存为单个 PNG”,而不是“我可以将其作为单个 PNG 保存BitmapData
”。