ict.lixian.three/Assets/APNG/LibAPNG/Chunks/fdATChunk.cs

55 lines
1.4 KiB
C#

using System.IO;
namespace LibAPNG
{
internal class fdATChunk : Chunk
{
public fdATChunk(byte[] bytes)
: base(bytes)
{
}
public fdATChunk(MemoryStream ms)
: base(ms)
{
}
public fdATChunk(Chunk chunk)
: base(chunk)
{
}
public uint SequenceNumber { get; private set; }
public byte[] FrameData { get; private set; }
protected override void ParseData(MemoryStream ms)
{
SequenceNumber = Helper.ConvertEndian(ms.ReadUInt32());
FrameData = ms.ReadBytes((int)Length - 4);
}
public IDATChunk ToIDATChunk()
{
uint newCrc;
using (var msCrc = new MemoryStream())
{
msCrc.WriteBytes(new[] {(byte)'I', (byte)'D', (byte)'A', (byte)'T'});
msCrc.WriteBytes(FrameData);
newCrc = CrcHelper.Calculate(msCrc.ToArray());
}
using (var ms = new MemoryStream())
{
ms.WriteUInt32(Helper.ConvertEndian(Length - 4));
ms.WriteBytes(new[] {(byte)'I', (byte)'D', (byte)'A', (byte)'T'});
ms.WriteBytes(FrameData);
ms.WriteUInt32(Helper.ConvertEndian(newCrc));
ms.Position = 0;
return new IDATChunk(ms);
}
}
}
}