static private ConvertEndian ( |
||
i | ||
return |
/// <summary> /// Gets the frame as PNG FileStream. /// </summary> public MemoryStream GetStream() { var ihdrChunk = new IHDRChunk(IHDRChunk); if (fcTLChunk != null) { // Fix frame size with fcTL data. ihdrChunk.ModifyChunkData(0, Helper.ConvertEndian(fcTLChunk.Width)); ihdrChunk.ModifyChunkData(4, Helper.ConvertEndian(fcTLChunk.Height)); } // Write image data using (var ms = new MemoryStream()) { ms.WriteBytes(Signature); ms.WriteBytes(ihdrChunk.RawData); foreach (IDATChunk idatChunk in idatChunks) { ms.WriteBytes(idatChunk.RawData); } foreach (ITextChunk chunk in TextChunks) { ms.WriteBytes((chunk as Chunk).RawData); } ms.WriteBytes(IENDChunk.RawData); ms.Position = 0; return(ms); } }
internal Chunk(MemoryStream ms) { Length = Helper.ConvertEndian(ms.ReadUInt32()); ChunkType = Encoding.ASCII.GetString(ms.ReadBytes(4)); ChunkData = ms.ReadBytes((int)Length); Crc = Helper.ConvertEndian(ms.ReadUInt32()); ParseData(new MemoryStream(ChunkData)); }
protected override void ParseData(MemoryStream ms) { Width = Helper.ConvertEndian(ms.ReadInt32()); Height = Helper.ConvertEndian(ms.ReadInt32()); BitDepth = Convert.ToByte(ms.ReadByte()); ColorType = Convert.ToByte(ms.ReadByte()); CompressionMethod = Convert.ToByte(ms.ReadByte()); FilterMethod = Convert.ToByte(ms.ReadByte()); InterlaceMethod = Convert.ToByte(ms.ReadByte()); }
protected override void ParseData(MemoryStream ms) { SequenceNumber = Helper.ConvertEndian(ms.ReadUInt32()); Width = Helper.ConvertEndian(ms.ReadUInt32()); Height = Helper.ConvertEndian(ms.ReadUInt32()); XOffset = Helper.ConvertEndian(ms.ReadUInt32()); YOffset = Helper.ConvertEndian(ms.ReadUInt32()); DelayNum = Helper.ConvertEndian(ms.ReadUInt16()); DelayDen = Helper.ConvertEndian(ms.ReadUInt16()); DisposeOp = (DisposeOps)ms.ReadByte(); BlendOp = (BlendOps)ms.ReadByte(); }
internal Chunk(byte[] bytes) { var ms = new MemoryStream(bytes); Length = Helper.ConvertEndian(ms.ReadUInt32()); ChunkType = Encoding.ASCII.GetString(ms.ReadBytes(4)); ChunkData = ms.ReadBytes((int)Length); Crc = Helper.ConvertEndian(ms.ReadUInt32()); if (ms.Position != ms.Length) { throw new Exception("Chunk length not correct."); } if (Length != ChunkData.Length) { throw new Exception("Chunk data length not correct."); } ParseData(new MemoryStream(ChunkData)); }
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)); } }
/// <summary> /// Gets the frame as PNG FileStream. /// </summary> public MemoryStream GetStream() { var ihdrChunk = new IHDRChunk(IHDRChunk); if (fcTLChunk != null) { // Fix frame size with fcTL data. ihdrChunk.ModifyChunkData(0, Helper.ConvertEndian(fcTLChunk.Width)); ihdrChunk.ModifyChunkData(4, Helper.ConvertEndian(fcTLChunk.Height)); } // Write image data using (var ms = new MemoryStream()) { ms.WriteBytes(Signature); ms.WriteBytes(ihdrChunk.RawData); otherChunks.ForEach(o => ms.WriteBytes(o.RawData)); idatChunks.ForEach(i => ms.WriteBytes(i.RawData)); ms.WriteBytes(IENDChunk.RawData); ms.Position = 0; return(ms); } }
protected override void ParseData(MemoryStream ms) { NumFrames = Helper.ConvertEndian(ms.ReadUInt32()); NumPlays = Helper.ConvertEndian(ms.ReadUInt32()); }
protected override void ParseData(MemoryStream ms) { SequenceNumber = Helper.ConvertEndian(ms.ReadUInt32()); FrameData = ms.ReadBytes((int)Length - 4); }