55 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |