using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.RemoteDesktop.Quantization; namespace Tango.RemoteDesktop.Encoders { public class Png8BitEncoder : FrameEncoder { public Png8BitEncoder(IFrame frame) : base(frame) { } public override MemoryStream ToStream() { MemoryStream ms = new MemoryStream(); var quantizer = new OctreeQuantizer(256, true); var quantized = quantizer.Quantize(Frame.ToBitmap()); ImageCodecInfo icf = GetEncoder(ImageFormat.Png); EncoderParameters parms = new EncoderParameters(1); EncoderParameter parm = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 8); parms.Param[0] = parm; quantized.Save(ms, icf, parms); ms.Position = 0; quantized.Dispose(); return ms; } } }