Java 如何在动画软件中表示帧数据?

Java 如何在动画软件中表示帧数据?,java,Java,我计划用JavaFX创建一个简单的2D逐帧动画编辑器。在画布上绘制,可以围绕时间轴移动以绘制动画的其他帧 这将是传统的动画-没有矢量或骨骼或任何这些 我现在主要关心的是如何存储每一帧的数据 表示帧的最基本方法是使用嵌套的像素数组。像这样: Pixel[][] oneFrame = new Pixel[100][100]; 将表示在100x100画布上绘制的一帧 如果用户使用1080p分辨率,帧将是1280x720像素:假设它们都填充了背景色,则几乎有一百万像素的实例。每帧有一百万个对象的想法并

我计划用JavaFX创建一个简单的2D逐帧动画编辑器。在画布上绘制,可以围绕时间轴移动以绘制动画的其他帧

这将是传统的动画-没有矢量或骨骼或任何这些

我现在主要关心的是如何存储每一帧的数据

表示帧的最基本方法是使用嵌套的像素数组。像这样:

Pixel[][] oneFrame = new Pixel[100][100];
将表示在100x100画布上绘制的一帧

如果用户使用1080p分辨率,帧将是1280x720像素:假设它们都填充了背景色,则几乎有一百万像素的实例。每帧有一百万个对象的想法并不鼓励我

因此,将多个帧作为像素阵列存储在内存中可能不是一个好主意

我还可以如何存储帧数据?我突然想到,人们可以存储创建这种框架所采取的步骤

String[] oneFrame = new String[] {"Stroke, Black, 0, 0, 1280, 720" , "Fill, Green, 0, 720"};
因此,此框架定义为:首先,从一个角到另一个角画一条线,然后用绿色填充前半部分

这比存储一百万件东西要轻得多。但也有一些缺点:

艺术家做的动作越多,程序渲染帧就越困难,因为每个动作都是渲染管道中的一个额外步骤。尤其是当艺术家们做了很多细节的时候。 如果我想有一个导出电影的功能,程序将不得不重新绘制每一帧,而不是读取任何类型的原始数据。我想这可能会导致大型动画的速度大幅下降。

我应该如何存储帧数据?

< P>我不是动画专家,但是这里有一些你可以考虑的想法。 是的,1080p每帧需要大约一百万像素。在一台拥有16 GB内存的64位计算机上,您可以在内存中保留大约10000帧。其余的可以存储在磁盘上

您需要为艺术家提供一种在层中创建动画的方法。可能有一个移动缓慢的背景层,一个移动稍快的前景层,还有一个角色层,角色在其中移动得更快。这将为动画提供3D效果。我相信迪斯尼在20世纪70年代就有了一台可以处理5层cel的机器。您可以将其扩展到10层左右

您可以为艺术家提供一种存储形状的方法。换言之,艺术家可以为每一帧稍微改变的每个角色绘制一幅画


我希望这是有帮助的。

您的第一帧可以是完整帧,后续的每一帧都可以存储为与前一帧的差异。我认为有这样的视频格式。另一种选择是将帧作为BMP有效地存储在磁盘上的像素阵列中,并创建智能缓存机制,当用户更改其在时间轴中的位置时,将相邻帧加载到内存中。除非像素存储的不仅仅是颜色,您应该使用一个基本值数组,比如int[][],并且您可以使用从磁盘读/写帧。