private void OnImageComposerNewImageAvailable(object sender, EventArgs e) { #if !NATIVE // reduce to 8bit using custom lib, return palette, store indices in buffer pixels uint[] pal = quant.Quantize((Bitmap)imageComposer.Image, 256, pixels, false); int colors = pal.Length; #else int colors = 256; uint[] pal = WuQuantWrap.WuQuant.Quantize(quant, imageComposer.Image, ref colors, pixels, 0); #endif // get timespan for gif double span = tick - tickLastAdd; tickLastAdd = tick; if (frame != null) { // set delay on last frame frame.GraphicsControl.DelayTime = (ushort)(span * 0.1); // add last frame gif.Frames.Add(frame); } // create new gif frame frame = new Gif.Frame( pixels, imageComposer.Image.Width, imageComposer.Image.Height, pal, (uint)colors, encoder, 0, 0); // cleanup imageComposer.Image.Dispose(); }
private void Finish(HttpContext context, int StatusCode = 200) { // reset tick = 0.0; tickLastAdd = 0.0; frame = null; // clean up reusable member instances imageComposer.DataSource = null; gif.Frames.Clear(); //gameObject.SubOverlays.Clear(); //gameObject.Clear(true); // set statuscode context.Response.StatusCode = StatusCode; // end response try { context.ApplicationInstance.CompleteRequest(); } finally { } // reuse the handler RenderRouteHandler.Handlers.Enqueue(this); }