APNG,即动画PNG,它与gif89相似,但gif89仅支持256色,因此在某些场景下APNG可能是更好的选择。APNG查看器基于优秀的.NETMNG查看器,由SprinterDave编写,所有荣誉归他所有。它使用纯C#编写,不依赖任何第三方组件,且体积非常小(仅30K)。
一直在寻找一个原生的.NETAPNG解析器/查看器,但不幸的是,就像之前编写DBX解析器时遇到的那样,找不到现成的解决方案(Google搜索是怎么回事?),所以不得不自己动手实现。
为了了解APNG是什么,可能需要阅读以下几篇文章:
APNG只是PNG的一个小扩展,并且与PNG兼容,所以像Internet Explorer这样的浏览器和其他不支持APNG的查看器仍然会显示第一帧。这里有一个图表可以给一个关于APNG文件格式的简要概念:
以下是一些APNG示例文件的链接:
也许在寻找其他语言的实现。这里有一些:
它像.NETMNG查看器一样逐块读取,根据基础头部重建每个PNG帧。如果仔细观察文件格式,会发现PNG规范相当简单。
首先创建APNG的新实例,然后使用Load函数读取文件,然后可以循环遍历NumEmbeddedPNG,使用ToBitmap函数将每个帧保存为PNG文件。以下是示例代码:
C#
APNG png = new APNG();
png.Load(@"animated.png");
for (int i = 0; i < png.NumEmbeddedPNG; i++)
{
Bitmap image = png.ToBitmap(i);
image.Save("frame" + i + ".png", ImageFormat.Png);
}
或者使用索引器:
C#
APNG png = new APNG();
png.Load(@"animated.png");
for (int i = 0; i < png.NumEmbeddedPNG; i++)
{
png[i].Save("frame" + i + ".png", ImageFormat.Png);
}