/// TaObチャンクを書き込みます。 protected void WriteTaOb(string type, uint opt0, uint opt1, byte[] data) { //Console.WriteLine("WriteTaOb {0}", type); //Console.WriteLine("taOb extract length {0}", data.Length); byte[] chunk_type = System.Text.Encoding.ASCII.GetBytes(type); MemoryStream dest = new MemoryStream(); using (DeflaterOutputStream gzip = new DeflaterOutputStream(dest)) { gzip.IsStreamOwner = false; gzip.Write(data, 0, data.Length); } dest.Seek(0, SeekOrigin.Begin); //Console.WriteLine("taOb length {0}", dest.Length); byte[] chunk_data = new byte[dest.Length + 20]; Array.Copy(chunk_type, 0, chunk_data, 0, 4); byte[] buf; buf = BitConverter.GetBytes((UInt32)opt0); Array.Copy(buf, 0, chunk_data, 4, 4); buf = BitConverter.GetBytes((UInt32)opt1); Array.Copy(buf, 0, chunk_data, 8, 4); buf = BitConverter.GetBytes((UInt32)data.Length); Array.Copy(buf, 0, chunk_data, 12, 4); buf = BitConverter.GetBytes((UInt32)dest.Length); Array.Copy(buf, 0, chunk_data, 16, 4); dest.Read(chunk_data, 20, (int)dest.Length); PNGWriter.WriteChunk(writer, "taOb", chunk_data); }
/// <summary> /// 指定ストリームに保存します。 /// </summary> /// <param name="dest_stream">ストリーム</param> public void Save(Stream dest_stream) { BinaryWriter bw = new BinaryWriter(dest_stream, System.Text.Encoding.Default); PNGWriter.Write(bw, header); PNGWriter.WriteIHDR(bw, ihdr); foreach (byte[] idat in IdatList) { PNGWriter.WriteIDAT(bw, idat); } if (WriteTaOb != null) { WriteTaOb(bw); } PNGWriter.WriteIEND(bw); }